SOCKET编程出现异常情况! 求解!

xiaoxiaodianzi 2010-06-18 02:22:23
我想请教下,一旦服务器和客户端失去了连接, 然后我这边还通过这个SOCKET连接发送数据。程序会出现异常吗?我现在有一段程序,收发一段时间后出现异常情况。 还有就是我把服务器和每个客户端的连接都存进链表中。一旦关闭监听就用CLOSESOCKET()函数关闭所有SOCKET。有时也会出现异常。我是在想会不会在关闭SOCKET的时候,那边SOCKET正好在接收或者发送数据。然后这样直接关闭掉会出现读写异常呢??? 我给接收,发送都新建一个线程。 还请各位大侠指点一下!
...全文
159 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Antheus 2010-06-18
  • 打赏
  • 举报
回复
Project->Setting->Executable for debug session
xiaoxiaodianzi 2010-06-18
  • 打赏
  • 举报
回复
哦 这里顺便也请教下 我是做成控件的。 如何调试? 我用微软自带的程序调试吧。又没办法按步骤运行下来 55~~ 郁闷~~
InitialJ 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xiaoxiaodianzi 的回复:]
引用 5 楼 initialj 的回复:
CLOSESOCKET()后应该结束所有的接收发送线程


那个我是有好几个SOCKET客户连接的 我只开了三个线程,一个用来管理连接的,一个用来发送的,一个用来接收的
[/Quote]
CLOSESOCKET()之后,你的接收发送线程需要结束或者挂起,你可以断点调试一下异常到底出在哪一步,估计就是在收发送线程内
xiaoxiaodianzi 2010-06-18
  • 打赏
  • 举报
回复
哦 那多谢Antheus, 我在检查一下
Antheus 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xiaoxiaodianzi 的回复:]
引用 5 楼 initialj 的回复:
CLOSESOCKET()后应该结束所有的接收发送线程


那个我是有好几个SOCKET客户连接的 我只开了三个线程,一个用来管理连接的,一个用来发送的,一个用来接收的
[/Quote]
我猜你是资源释放的问题。要保证线程共享数据是在最后一个线程关闭时释放。
在任何一个线程内强行关闭SOCKET是不会有任何问题的,只要在另外两个线程内对SOCKET函数返回值进行检测,然后决定是否需要退出。
xiaoxiaodianzi 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 initialj 的回复:]
CLOSESOCKET()后应该结束所有的接收发送线程
[/Quote]

那个我是有好几个SOCKET客户连接的 我只开了三个线程,一个用来管理连接的,一个用来发送的,一个用来接收的
Antheus 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiaoxiaodianzi 的回复:]
错了 出现 这个我也不清楚的错误
[/Quote]

红X图
Antheus 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 m_tornado 的回复:]
会异常吧,我的是在自己边发送,对方断掉时,会有一个消息,不知道具体是什么,消息值是0x27450020,希望明白人看看~
[/Quote]
不会的。即使SOCKET已经关闭再继续调用RECV或SEND都不会有异常,只是WSAGetLastError的返回值将会是WSAXXXX,例如WSAECONNRESET(An existing connection was forcibly closed by the remote host),WSAEBADF(The file handle supplied is not valid).
xiaoxiaodianzi 2010-06-18
  • 打赏
  • 举报
回复
怎么会是调试声明错误呢? 啥意思啊?
xiaoxiaodianzi 2010-06-18
  • 打赏
  • 举报
回复
错了 出现 这个我也不清楚的错误
Antheus 2010-06-18
  • 打赏
  • 举报
回复
直接关闭SOCKET对方会收到WSA_CONNECTRET的错误,但不会导致本方的异常。如果有异常,则会是出现在本方处理数据方面,简单的closesocket也不会引起内存访问越界的异常,只是BUFFER中没有想要得到的数据而已,所以检查你的BUFFER内存的管理代码。
m_tornado 2010-06-18
  • 打赏
  • 举报
回复
会异常吧,我的是在自己边发送,对方断掉时,会有一个消息,不知道具体是什么,消息值是0x27450020,希望明白人看看~
InitialJ 2010-06-18
  • 打赏
  • 举报
回复
CLOSESOCKET()后应该结束所有的接收发送线程
Eleven 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoxiaodianzi 的回复:]
内存不可写,或者内存不可读
[/Quote]
那是指针越界或者内存溢出了吧。。。
【天运子】 2010-06-18
  • 打赏
  • 举报
回复
连接断了 就不能用socket发了。。。
xiaoxiaodianzi 2010-06-18
  • 打赏
  • 举报
回复
内存不可写,或者内存不可读
InitialJ 2010-06-18
  • 打赏
  • 举报
回复
出现什么异常了??

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧