所以我编写了代码,以便我可以与服务器和客户端进行通信。使用套接字与客户端和服务器进行通信
- 第一个问题是服务器如何识别它与实际客户端通信,而不是其他人使用该端口,我听说浏览器使用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对象相匹配, –