【问题标题】:Reading bytes from socket to byte array [closed]从套接字读取字节到字节数组[关闭]
【发布时间】:2012-11-23 21:15:45
【问题描述】:

我正在使用一个客户端/服务器应用程序,我必须从服务器上接收到的数据中读取字节。我正在尝试将其从 Java 转换为 C#,但我似乎无法解决这个问题! T

Java 代码:

byte[] bucket = new byte[4];
this.socket.getInputStream().read(bucket, 0, 2);

现在我需要 C# 中的相同代码!希望你能帮帮我!

【问题讨论】:

  • 没什么,我一直在谷歌上搜索,但我仍在学习很多东西,我真的不知道如何解决这个问题!
  • @FabianPas 首先尝试一下。如果您仍有问题,我们将随时为您提供帮助。
  • 我可以用我的 Socket 创建一个新的 NetworkStream 对象并从中使用 Read 方法吗?

标签: c# java sockets networking


【解决方案1】:

如果你想要一个类似的端口,最明智的做法可能是将套接字包装在 NetworkStream 中,然后它的行为很像 getInputStream 结果(除了你只会做一次) ,即

var ns = new NetworkStream(socket);
...
int bytesRead = ns.Read(bucket, 0, 2);

但请记住确保在完成后处理ns(最好通过using)。如果要直接使用套接字,则必须在套接字上使用Receive 方法。

【讨论】:

  • 如果我使用 socket.Receive 它是否只分配消息的前 4 个字节,因为这是字节数组的大小?如果我想获得一定的偏移量怎么办?
  • @Fabian 还有其他重载要接收。对 Read 的调用当前仅读取 2 个字节(最大),顺便说一句 - 并且可能更少。引用 java 文档:从输入流中读取多达 len 个字节的数据到一个字节数组中。尝试读取多达 len 个字节,但可能会读取较小的字节数,可能为零。实际读取的字节数以整数形式返回。
  • @Fabian 实际上,我想说的是您的 java 代码没有捕获返回值这一事实告诉我 java 代码有问题。
【解决方案2】:

您可能想使用TCP Client

   TcpClient client = new TcpClient(server, port);
   NetworkStream stream = client.GetStream();
   Byte[] data = new Byte[4;
   stream.Read(data, 0, data.Length);

编辑:假设您已经可以访问套接字,请尝试以下操作(使用Socket#Receive):

   byte[] bucket = new byte[4];
   int bytesRec = socket.Receive(bucket);

【讨论】:

  • 不好意思,其实是服务器接收数据,我只有一个socket。
  • @FabianPas:更新了答案。如果这没有帮助,请告诉我。
【解决方案3】:

System.Net.Sockets.TcpListener 的示例代码中有一个超级简单的 http 服务器实现。该示例显示了如何从套接字读取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 2016-09-24
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多