I am trying to send a value by socket .So i have two parts in my project Client
and server
.
The client
sends a value to server using this code :
System.IO.BinaryWriter binaryWriter =
new System.IO.BinaryWriter(networkStream);
binaryWriter.Write(1);
binaryWriter.Write(2);
binaryWriter.Flush();
So in other part i need to read the two values i mean 1
and 2
;
So in server part i have this code :
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);
}
}
}
}
}
As you can see i hold the values in variables
list .but it doesn't work .i mean in server part i can't get the values 1
and 2
and my values is like this :841757955
best regards.
As far as I can tell from your code, you are sending data as a string in binary format, this will yield bytes for the characters 1,2
.
When you read the data back you try to get Int32 values.
There are two options here:
Read and write data as a string.
Client code:
binaryWriter.Write("1,2");
Server code:
string text = binaryReader.ReadString(); // "1,2"
OR Read and write data as integers.
Client code:
binaryWriter.Write(10);
binaryWriter.Write(20);
Server code:
int value1 = binaryReader.ReadInt32(); //10
int value2 = binaryReader.ReadInt32(); //20
and my values is like this :841757955
Always worth sticking that number in the Windows calculator and convert that to hex. You get 0x322C3503.
Which looks a lot like ASCII, a string with 3 characters that encodes "5,2". In other words, your real code doesn't resemble your snippet at all, you don't actually use the BinaryWriter.Write(Int32) overload, you used BinaryWriter.Write(String).
Sure, that can't work, you can't write a string and expect it to be readable as raw integers. Fix your code.
来源:https://stackoverflow.com/questions/24448304/send-a-value-by-socket-and-read-the-value-by-reader-readint32-changes-value