社区
网络编程
帖子详情
关于多线程读写一个SOCKET问题
newplayer1
2007-11-24 02:33:22
一个服务程序,开了两个线程,对一个连接进行写操作(客户端登陆,服务器下发一些数据),其中一个线程要下发的数据比较大(线程1),大概几M,另一个线程大概隔段时间采集到一些数据(线程2),也要发给客户端
问题出来了,客户端接收的时候,线程1发的数据只是一个大包,结果发现这个数据包里夹着线程2的数据,我设置的发送方式是阻塞的,应该是先写一个数据包,接收完一个之后,才能收第二个,为什么会混在一起呢?
期待高手回答
...全文
437
10
打赏
收藏
关于多线程读写一个SOCKET问题
一个服务程序,开了两个线程,对一个连接进行写操作(客户端登陆,服务器下发一些数据),其中一个线程要下发的数据比较大(线程1),大概几M,另一个线程大概隔段时间采集到一些数据(线程2),也要发给客户端 问题出来了,客户端接收的时候,线程1发的数据只是一个大包,结果发现这个数据包里夹着线程2的数据,我设置的发送方式是阻塞的,应该是先写一个数据包,接收完一个之后,才能收第二个,为什么会混在一起呢? 期待高手回答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Torch009
2007-12-05
打赏
举报
回复
I 服了 U
cnlzx
2007-12-01
打赏
举报
回复
--------
就算是多线程,应该也有先后的,对吧?
比如我线程1先开始的,那么在它没有写完之前,线程2应该是排队的呀,而且TCP自动分包组包,虽然线程1的包比较大,那也不能在中间插入别的包啊?
确实可以设置同步,但是应该不用同步就能解决啊
---------
确实线程1开始send的时候,貌似线程2是排队的, 但是像线程1send的数据大的话
我通常会在一个循环里send,直到全部数据发完,只调用一下send,然后给一个好大数字的len参数感觉不踏实。
如果循环里send确实是调用了几次
这个时候倒是有可能线程2 插会进来。
^_!居然是你客户端的问题
ppcat_001
2007-11-30
打赏
举报
回复
恭喜接分~
captain_x
2007-11-30
打赏
举报
回复
jf
Torch009
2007-11-30
打赏
举报
回复
我来接分了。
jjfwenwenti
2007-11-26
打赏
举报
回复
恭喜接分~
newplayer1
2007-11-24
打赏
举报
回复
闹了半天是客户端程序的问题,事实证明我说的是对的,分怎么给啊,你们都没说对
newplayer1
2007-11-24
打赏
举报
回复
就算是多线程,应该也有先后的,对吧?
比如我线程1先开始的,那么在它没有写完之前,线程2应该是排队的呀,而且TCP自动分包组包,虽然线程1的包比较大,那也不能在中间插入别的包啊?
确实可以设置同步,但是应该不用同步就能解决啊
qeq2008
2007-11-24
打赏
举报
回复
接收线程没有控制好,
shager
2007-11-24
打赏
举报
回复
最好设置一下同步,等待一个写完了以后,另一个再开始。你设置的虽然是阻塞模式,但是有多个线程,他们确实并行的,所以,你可以定义一个CEvent对象来同步多个线程。
java
socket
通讯例程
多线程
读写
可以同时收发不同终端的消息
在主线程中通过控制台读取键盘输入时,会产生阻塞。故另外开启
一个
线程,用于接受客户端的
socket
消息。服务器在收到
一个
socket
连接之后,把该
socket
保存到队列中,并对队列中的每个
socket
开启各自的
读写
线程。测试可以在不同控制台运行server和client,服务器接收消息时,会显示消息来源
多线程
问题
:为什么不应该使用
多线程
读写
同
一个
socket
连接?
为什么不应该使用
多线程
读写
一个
socket
连接
c++
多线程
模式下的
socket
编程(线程池实现)
socket
编程可以说是
一个
基本的技术掌握,而多个客户端向服务端发送请求又是
一个
非常常见的场景,因此
多线程
模式下的
socket
编程则显得尤为常见与重要。 本文主要利用线程池的技术,来实现
多线程
的模式,线程池的优点就不多述了,相信大家都能理解,就是减少了线程创建于销毁的时间,提高
多线程
的性能。 首先,先写个线程池: 下面分别是头文件 和cpp文件 #ifnd...
Qt中采用
多线程
实现
Socket
编程
Qt中采用
多线程
实现
Socket
编程
Socket
通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 本文介绍的是Qt中采用
多线程
Socket
编程,由于工作的需要,开始接触Qt的
socket
编程。Qt里的example是个不错的教程,但是当我把代码移植到
多线程
的环境时就出
问题
了: QObject: Cannot create children for a par...
socket
同时
读写
问题
如果是多个线程同时写
socket
,那么在临界区里工作的线程为了保证数据包的完整发送,必须循环发送等待,直到数据都发送到系统缓冲区才能离开临界区。 而这样就导致
socket
的行为与阻塞方式发送无异,发送效率因此而被限制。 所以
一个
好的tcp
socket
处理框架,应该是只有
一个
线程来负责数据的收发,从而避免那些无穷无尽的同步
问题
。 如果需要多个线程同时读访问或写访问同
一个
tcp
socket
,
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章