关于socket接收数据如何读取识别,小白请教!
正在做一个网络对战的五子棋小程序,有对战功能和聊天功能。如果客户端只用一个socket对象能否完成两个任务,就是一个socket对象可以完成五子棋位置数据的传输接收,并且还能接受发送聊天内容。
是不是可以在每次发送数据前先发送一个标志位,告诉服务端接下来发送的是什么数据。可是这样我在聊天内容中也可以发送同样的内容,会产生冲突。是不是应该判断一下聊天内容再发送?或者有什么别的方法吗?
是不是基于流的]网络传输都要这么麻烦的一个字符一个字符的判断?如果用序列化是不是大材小用了?
------解决方案--------------------可以,就是数据解析与发送都需要增加一个类型识别,一般放在前面。
如果你嫌麻烦,可以试试fastCSharp的TCP调用,不需要处理socket操作,差不多是写个函数就可以远程调用了。
------解决方案--------------------一个通常的做法是自定义一个数据包
比如
datalen //数据的长度
flag 聊天内容or堆栈信息
.....
data[.....]
接收的时候,根据datalen来读取数据,可能一次读不全,就多读几次