win32 TCP通信连续发送接收数据的问题

时间:2023-01-25 10:17:20
    我自己封装了一个mysocket类,里面用的是win32 的api进行socket,是TCP协议通信。这个类的作用就是作为一个客户端,连到指定的服务器上,然后跟服务器进行数据交互。按照TCP客户端的通信步骤,本来应该是send一次之后就要调用一次recv。我觉得这样很麻烦,就自己做了一个线程,线程里有一个死循环,一直接收数据。问题就是,我下一次send的时候需要先收到上一次的回应数据,然后根据解析的结果来确定要发什么消息。我尝试过在接收的子线程里用postThreadMessage 来实现,但是这个时候主线程会卡死在getmessage这里。请问一下有比较好的方法解决这个问题吗

8 个解决方案

#1


win32 TCP通信连续发送接收数据的问题
这个就是涉及到设计模式什么的了,我是采用接口回调的方式,回调函数onRecv,或者提供一个方法GetMessage 遍历接收到的数据包

#2


引用 1 楼 smwhotjay 的回复:
win32 TCP通信连续发送接收数据的问题
这个就是涉及到设计模式什么的了,我是采用接口回调的方式,回调函数onRecv,或者提供一个方法GetMessage 遍历接收到的数据包


引用 1 楼 smwhotjay 的回复:
win32 TCP通信连续发送接收数据的问题
这个就是涉及到设计模式什么的了,我是采用接口回调的方式,回调函数onRecv,或者提供一个方法GetMessage 遍历接收到的数据包


大兄弟,能详细一点吗,这方面我不太熟啊,谢谢

#3


如果不是UI线程, 应该使用  Event 或 Mutex 等同步信号量
如果是UI线程 使用 PeekMessage 来替换GetMessage

#4


引用 3 楼 zgl7903 的回复:
如果不是UI线程, 应该使用  Event 或 Mutex 等同步信号量
如果是UI线程 使用 PeekMessage 来替换GetMessage

这个不设计到UI,是我自己想做一个专门用于socket通讯的类, 这是在一个类里面。

#5


不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545

#6


该回复于2018-04-26 14:46:42被管理员删除

#7


你也不一定要使用postThreadMessage ,你可以使用一个全局缓冲区,两个线程共同使用,然后加同步

#8


WSAAsyncSelect用消息机制来处理收发

#1


win32 TCP通信连续发送接收数据的问题
这个就是涉及到设计模式什么的了,我是采用接口回调的方式,回调函数onRecv,或者提供一个方法GetMessage 遍历接收到的数据包

#2


引用 1 楼 smwhotjay 的回复:
win32 TCP通信连续发送接收数据的问题
这个就是涉及到设计模式什么的了,我是采用接口回调的方式,回调函数onRecv,或者提供一个方法GetMessage 遍历接收到的数据包


引用 1 楼 smwhotjay 的回复:
win32 TCP通信连续发送接收数据的问题
这个就是涉及到设计模式什么的了,我是采用接口回调的方式,回调函数onRecv,或者提供一个方法GetMessage 遍历接收到的数据包


大兄弟,能详细一点吗,这方面我不太熟啊,谢谢

#3


如果不是UI线程, 应该使用  Event 或 Mutex 等同步信号量
如果是UI线程 使用 PeekMessage 来替换GetMessage

#4


引用 3 楼 zgl7903 的回复:
如果不是UI线程, 应该使用  Event 或 Mutex 等同步信号量
如果是UI线程 使用 PeekMessage 来替换GetMessage

这个不设计到UI,是我自己想做一个专门用于socket通讯的类, 这是在一个类里面。

#5


不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545

#6


该回复于2018-04-26 14:46:42被管理员删除

#7


你也不一定要使用postThreadMessage ,你可以使用一个全局缓冲区,两个线程共同使用,然后加同步

#8


WSAAsyncSelect用消息机制来处理收发