“通常每个套接字地址 (协议/网络地址/端口)只允许使用一次”问题求助
我做了一个收发消息的程序,用的是CSocket,运行时有时候能发出去,有时候发不出去。发不出去时,调用geterrorcode并转换后得到系统的提示消息为“通常每个套接字地址 (协议/网络地址/端口)只允许使用一次”。是不是CSocket执行完后没有释放端口的原因啊?不过我的代码中在CSocket执行完后调用过Close()函数了啊?应该怎么改呢?我的代码大体流程是这样的,程序初始化后即开始ontimer(),在ontimer函数中初始化Socket,进行ReceiveSocketServer.Listen()(接收端监听),ReceiveSocketServer.Accept(receiveSocket);
receiveSocket.Receive(str,10,0),接收完后关闭Socket。发送时启动另一个Ontimer,在ontimer中每隔一段时间发送一次,发送完后关闭ontimer及Socket.问题出在哪呢?
问题点数:20、回复次数:7Top
1 楼Yangtzeliuyang()回复于 2004-12-02 09:53:49 得分 0
对了,我的发送端端口为6802,接收监听端口为6800,发送端和接收端在一个程序中。Top
2 楼smartcomplier(坚强的泡沫)回复于 2004-12-02 14:50:47 得分 4
没有作端口绑定吗?
Top
3 楼Yangtzeliuyang()回复于 2004-12-02 15:54:40 得分 0
有绑定的Top
4 楼jasonbiao(阿彪)回复于 2004-12-02 16:58:35 得分 4
socket好像有个从容关闭的概念,还有TTL,可能和这个有关。楼主可以查查这方面的资料。
我刚接触socket,学习ing……Top
5 楼whwjn(哈哈)回复于 2004-12-02 19:12:31 得分 4
地址重用试试看
setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, (char *) &optval, sizeof( BOOL ))
地址重用出现在当一个socket 和IP与已知的端口bind()后,继续对该端口
调用bind()操作,或者当一个socket调用closesocket()后经历TIME_WAIT的
过程中对该socket调用bind();
Top
6 楼RedAngel001()回复于 2004-12-02 19:22:18 得分 4
为什么要在ontimer中初始化?不费劲吗?Top
7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-02 20:22:17 得分 4
设置地址重用选项,
tcp中,端口号需要经历一段时间才会释放Top




