通过套接字发送值并通过reader.ReadInt32()更改值来读取值

时间:2014-06-27 09:23:36

标签: c# sockets binary-data binaryreader

我正在尝试通过套接字发送一个值。因此,我的项目Clientserver中有两个部分。

client使用以下代码向服务器发送值:

           System.IO.BinaryWriter binaryWriter =
           new System.IO.BinaryWriter(networkStream);
           binaryWriter.Write(1);
           binaryWriter.Write(2);
           binaryWriter.Flush();

所以在其他方面,我需要阅读我的意思是12这两个值;

所以在服务器部分我有这个代码:

  static void Listeners()
        {

        Socket socketForClient = tcpListener.AcceptSocket();
        if (socketForClient.Connected)
        {
            NetworkStream networkStream = new NetworkStream(socketForClient);


            while (true)
            {
                  List<int> variables = new List<int>();
                using (var reader = new BinaryReader(networkStream))
                {
                    for (int i = 0; i < 2; i++)
                    {
                        int t = reader.ReadInt32();
                        variables.Add(t);
                    }
                }

      }
   }
}

正如您所看到的,我保留variables列表中的值。但它不起作用。我的意思是在服务器部分我无法获取值1和{{ 1}}和我的价值观是这样的:841757955

最好的问候。

2 个答案:

答案 0 :(得分:2)

  

我的价值观是这样的:841757955

始终值得在Windows计算器中粘贴该数字并将其转换为十六进制。你得到0x322C3503。

看起来很像ASCII,一个包含3个字符的字符串,编码为“5,2”。换句话说,你的真正的代码根本不像你的代码片段,你实际上并没有使用BinaryWriter.Write(Int32)重载,你使用了BinaryWriter.Write(String)。

当然,这不起作用,你不能写一个字符串,并期望它作为原始整数可读。修复你的代码。

答案 1 :(得分:1)

据我所知,您的代码是以二进制格式将数据作为字符串发送,这将为字符1,2生成字节。

当您读回数据时,您尝试获取Int32值。

这里有两个选项:

以字符串形式读取和写入数据。

 Client code:

 binaryWriter.Write("1,2");

 Server code:

 string text = binaryReader.ReadString(); // "1,2"

OR以整数读写数据。

Client code:

binaryWriter.Write(10);
binaryWriter.Write(20);

Server code:

int value1 = binaryReader.ReadInt32(); //10
int value2 = binaryReader.ReadInt32(); //20