首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用套接字与客户端和服务器进行通信

使用套接字与客户端和服务器进行通信
EN

Stack Overflow用户
提问于 2016-08-25 06:47:01
回答 4查看 189关注 0票数 0

因此,我编写了代码,以便能够与服务器和客户端进行通信。

  • 第一个问题是,服务器如何识别其与实际客户端的通信,而不是其他使用端口的人,我听说浏览器使用SHA散列验证与服务器的通信。
  • 第二个问题是关于在变量中发送和接收数据的最佳方法,以及哪种方法是哪一种,因为当前的数据分割方法似乎不太优雅。

接收和发送数据的服务器端代码:

代码语言:javascript
运行
复制
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();

要发送和接收的客户端代码

代码语言:javascript
运行
复制
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]);
EN

Stack Overflow用户

回答已采纳

发布于 2016-08-25 07:11:52

您的第一个问题涉及身份验证,这是一个很大的主题,有许多可能的实现,尽管我不清楚您所说的“其他人正在使用端口”是什么意思。您的服务器应该始终位于同一个端口上--这就是客户机识别服务的方式。

关于第二个问题,还有很多可能性,但我建议初学者最简单的方法是使用XmlSerializer和一个简单的消息信封。

  1. 创建一个XmlSerializable类,只使用简单的公共属性,或者使用XmlElementAttribute、XmlRootAttribute等装饰。
  2. 序列化为MemoryStream
  3. 从封装在信封中的内存流中写入字节(请参阅稍后)
  4. 接收一个完整的信封到一个字节数组中。
  5. 从字节数组构造MemoryStream
  6. 使用XmlSerializer重构原始对象的副本。

信封很关键。最简单的就是序列化对象的二进制长度。大多数协议通常会扩展CRC来处理可能的损坏,但是由于以太网使用强CRC和TCP是一种可靠的传输(尽管具有弱的CRC),这通常是过分的。初学者忽略的关键是TCP是一种流协议,而不是基于消息的协议,因此发送方完全有可能对单个写入(例如1000个字节)进行一次写入,但接收方却将其作为许多较小的块接收。这就是为什么您需要某种方法来检测消息的结束,比如使用长度,以及为什么接收者需要累积接收到的块,直到接收到完整的消息(可能是下一个消息的一部分)并可以反序列化为止。

这可能看起来很复杂,但不幸的是,在TCP级别上,没有比这更简单的了:

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39138444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档