读书人

c++socket

发布时间: 2012-06-19 14:45:20 作者: rapoo

c++socket求助
SOCKET服务器端是JAVA写的,客户端是C++写的。

现在遇到一个奇怪的现象:

有的时候数据传输的非常顺畅,一秒钟几十甚至上百条数据都没问题,但是有的时候就卡在那里,数据是持续的,C++会滚动显示发送信息的条数,而服务器端的SOCKET服务在接收到数据之后都会写日志,在卡在那里的时候,客户端会停止滚动显示信息,服务器端的日志也没有更新,但是服务器端和客户端都不提示错误或者异常。

服务器端的JAVA用的观察者模式,客户端的C++用的单线程处理和发送数据。

请问这种现象大多数是因为什么产生的?我该从哪里入手解决?

谢谢!

[解决办法]
你说的卡是完全卡住不动了,还是只是很慢但是仍然能通信?
很慢可能是网络上有其他通信在占用带宽。
完全卡住了,你可以看两边的SOCKET是哪个先挂了,有可能是服务器挂了,导致客户端发不出去。
在卡住的时候你可以使用另外一个电脑,去连接服务器发送数据看是否正常,然后判断是客户端问题还是服务器端问题。
[解决办法]
先看网卡上有没有收到数据
[解决办法]
不过从速率上来看,“每秒上百条”是极限么?

如果是,实现应该有问题,对于局域网,tcp应该能轻松达到网卡最大带宽,udp因为包太碎和一些额外的控制流程情况复杂些
[解决办法]

探讨
引用:

你说的卡是完全卡住不动了,还是只是很慢但是仍然能通信?
很慢可能是网络上有其他通信在占用带宽。
完全卡住了,你可以看两边的SOCKET是哪个先挂了,有可能是服务器挂了,导致客户端发不出去。
在卡住的时候你可以使用另外一个电脑,去连接服务器发送数据看是否正常,然后判断是客户端问题还是服务器端问题。


不是慢,而是卡,只有把服务器端的服务重启之后才会继续接收……

[解决办法]
建议楼主下载个wireshark,对你网卡进行抓包分析。看看是不是网络的问题
[解决办法]
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

[解决办法]
顶赵老师,说的太好了

读书人网 >C++

热点推荐