我正在尝试通过套接字发送一个值。因此,我的项目Client
和server
中有两个部分。
client
使用以下代码向服务器发送值:
System.IO.BinaryWriter binaryWriter =
new System.IO.BinaryWriter(networkStream);
binaryWriter.Write(1);
binaryWriter.Write(2);
binaryWriter.Flush();
所以在其他方面,我需要阅读我的意思是1
和2
这两个值;
所以在服务器部分我有这个代码:
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
答案 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