连接调用了两次Send第一次内容为:123
第二次内容为:456Server端却只收到一个消息,内容为:123456,两次内容被连在一起了我想把们分成两次收(我现在的做法就是加了分隔符),很久以前的程序了,想改一下,你们都是如何解决的?
第二次内容为:456Server端却只收到一个消息,内容为:123456,两次内容被连在一起了我想把们分成两次收(我现在的做法就是加了分隔符),很久以前的程序了,想改一下,你们都是如何解决的?
解决方案 »
- 崩溃了,VC6转2010,改了一天代码,最后链接不成,靠
- VC 通过声卡连续发出多个不同频率和不同时间长度声音?
- 偷偷用别人的DLL的导出函数
- WebService访问服务器时出现“〖997〗-重叠 I/O 操作在进行中”错误
- 请问怎样获得进程的CPU占用情况,内存使用情况!
- 如何动态改变静态文本控件的内容??
- 插入ocx,但缺少方法,但在vb或Active Control Test Container中有。
- 去掉标题栏后,怎机将隐藏的窗口最大化
- 怎么从资源的名字得到它的ID号
- DLL初学者问一个小问题:不能定义声明“dllimport”的函数
- linux下用socket发送图片给windows,如何实现?
- 请问如何设计显示位图的命令
另外,发送的内容的长度是要实现知道的,这样你就可以知道接收发送多长的内容了
要用自定义协议实现,你要自己知道这次需要接收的数据是多少协议协议协议.........
比如
struct OwnData{
char Magic[3];
char Data[32];
}
每次固定接收sizeof(OwnData)长度的数据,把自己的数据分离出来
或者
struct OwnData{
char Magic[3];
INT datalen;
}
在结构体后面跟上数据,每次固定接收sizeof(OwnData)长度的数据,再根据里面的datalen,接收后面所需要的数据
无法避免,
自定义协议来解析流吧。
0 1 2 3 4
FF 10 10 10 FF
FF就为你的数据包头和数据包尾。其次,你要知道你的数据长度,这样才能更好的接收,已免接收的数据有乱码出现。然后对接收的数据进行判断分析,就可以了
这个方案允许使用可变长度的消息,惟一的不足就是接收端的远程设置必须了解每一个变长消息的确切长度。具体的方法是,在发送消息的时候,一起发送该消息的长度。那么在客户端接收的时候就能知道该消息的长度是多少,再来读取消息。 3、使用消息标记 该方案使用预先确定的一个字符(或多个字符)来指定消息的结束,通过这种方式来分隔不同的消息。但用这种方法必须对所接收到的每一个字符进行检查以便确定为结束标记,这对于大型消息来说,可能导致系统性能的下降