诚心请教关于socket的一个问题(真的给分)

luke_pro 2001-07-20 03:58:10
吾有一个函数中创建了一个线程,线程和函数同时使用同一个socket进行数据的传输。可是我发现有时候在服务端会收到几个消息的集合(即几个分别发送的数据在服务端被同时接收并被作为一个数据了),给位大虾帮忙看看如何解决。如果确实有效,小弟大大的加分。谢谢
...全文
49 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenyard 2001-07-20
  • 打赏
  • 举报
回复
typedef struct pre_head_tag
{
byte cmd;
word len;
}PRE_HEADER;
typedef struct mydata_tag
{
PRE_HEADER block;
char content[512];
}MY_BUFF;
每次发送的buff以MY_BUFF为结构就行了
接受的时候先收sizeof(PRE_HEADER),再根据PRE_HEADER中的len来收下面的数据
zzh 2001-07-20
  • 打赏
  • 举报
回复
你利用两个SOCKET进行数据传输就可以了,在线程中使用一个,在别的程序中使用另一个,
如果你一定要使用两个,那你要使用互斥量来进行控制,
首先申请要进行数据成功,如果申请成功就利用这个SOCKET进行数据传输,如果不成功,就不传输
vc_boy 2001-07-20
  • 打赏
  • 举报
回复
这是有可能的,因为采用STREAM进行数据通讯时,SOCKET接到数据后放入网络难栈中,然后用接收函数接收时函数会尽可能多的接收收到的数据(以recv函数的接收大小参数的指定为上限)。
方法吗:
第一种,做好包的定义,如包号,结束符等。接收后在所有收到的数据中处理每个数据包。
第二种,按一定的大小进行接收,如每次是传100个字节,那你在接收时每次就接收100个字节,然后循环接收。


说的不一定对,但不妨试一试。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧