【发布时间】:2017-01-01 11:34:32
【问题描述】:
所以我已经编写了代码,以便我可以与服务器和客户端进行通信。
- 第一个问题是服务器如何识别它与实际客户端通信,而不是使用该端口的其他人,我听说浏览器使用 SHA 哈希与服务器进行验证。
- 第二个问题是关于在变量中发送和接收数据的最佳方式,并确定哪个是哪个,因为当前拆分数据的方法似乎不太优雅。
接收和发送数据的服务器端代码:
NetworkStream NetStream1 = TCPSocket.GetStream();
NetStream.Read(Buffer, 0, Buffer.Length);
ReceivedData = System.Text.Encoding.ASCII.GetString(Buffer);
string[] splitter = ReceivedData.Split('-');
Variable1 = splitter[0];
Variable2 = splitter[1];
//send response
SendBuffer = Encoding.ASCII.GetBytes(ResultINT1+"-"+ResultINT2);
NetStream.Write(SendBuffer, 0, SendBuffer.Length);
NetStream.Flush();
发送和接收的客户端代码
NetworkStream SendStream = ClientSocket.GetStream();
byte[] SendBuffer = System.Text.Encoding.ASCII.GetBytes(V1+"-"+V2);
SendStream.Write(SendBuffer, 0, SendBuffer.Length);
SendStream.Flush();
//response
SendStream.Read(RecieveBuffer, 0, RecieveBuffer.Length);
string ResultString = System.Text.Encoding.ASCII.GetString(RecieveBuffer);
string[] splitted = ResultString.Split('-');
int R1 = Convert.ToInt32(splitted[0]);
int R2 = Convert.ToInt16(splitted[1]);
【问题讨论】:
-
您的代码已损坏。您不知道在
ReceiveBuffer中放置了多少字节(您忽略了Read的返回值,这会告诉您),因此将整个缓冲区转换为字符串是不安全的。无法保证一端对Write的调用与另一端对Read的调用匹配。
标签: c# sockets tcp networkstream