我在SOCKET编程中出现的几个怪问题,还请大家帮忙解决一下!!谢谢(100分)

  • 主题发起人 主题发起人 jayxsjf
  • 开始时间 开始时间
J

jayxsjf

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在编写一个SOCKET通讯的程序,在调试过程中出现了好几个
问题,实在找不到办法了:
1。我通过定时去检查TClientSocket.Socket.Connected来判断
是否断开了连接,如果断开了则重新连接,但是程序运行一段时间
后就报缓冲区已满(10055)错误,我通过跟踪发现TClientSocket
在Close的时候,真正负责通信的底层SOCKET并为CLOSE,我通过
在TClientSocket.close前增加TClientSocket.Socket.close
这样放在我的机器上运行了三天没有出错,正在我以为解决了的时候
又报了这个错,请问出现这个错是我说的原因吗?还是另有办法解决?
(注:这三天我一直断开了与服务器的连接)
2.还有个问题就是:无论是CLIENT端还是SERVER端,只要消息发的快了
就有可能几条消息合并在一起收到,我通过延时可以解决,但是我现在的
程序不允许延时,请问还有什么好方法吗?
3。最后一个问题就是:在网络正常连接的情况下,我要是拔掉网线,CLIENT
和SERVER都不能检测到断开,在CLIENT端我通过读取
TClientSocket.Socket.RemoteHost可以判断出来,可是SERVER端就没有办法
了,还请帮忙!!
 
1、出错原因是你重新连接之前一定要断开连接,比如ErrorCode=10061就应该关闭这个
套接字,这个问题前面讨论过。因为TClientSocket.Active:=true;的时候建立了一个
新的套接字。如果不关闭的话系统资源将耗尽
2、TCP是流式协议,就是没有数据边界保护, 你可以采用一 问一答的方式来通讯
比如Client发送一个数据后,Server接受到后再返回一个应答数据就可以了,也可以
采用一个结构来传递数据,不过有点麻烦,前面有些帖子讨论过这个问题,我在网吧
不能写代码给你了
3、你可以通过用GETHOSTBYNAME得到本机IP就可以知道网线是否拔掉,如果IP为NIL就
是网线拔掉了
 
1。我已经关闭了,但是还是报这个错
3。我想让服务器知道客户端是否拨掉网线,该乍么办?
 
定期向客户发连接测试包,如果写返回异常或《=0则断开,使用堵塞方式有效。
 
后退
顶部