accept()失败,怎么回事呀。 大家请进来(在线等...)

hanzp 2003-04-18 02:51:52
在同一客户端连续发出连接请求后我的服务端就出错,这是为什么?
我是这样创建连接套节字的

s = accept( myListenSocket, NULL, NULL);
ASSERT( s != INVALID_SOCKET )

但是在不同的客户端发出请求就没有问题
...全文
445 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
BinaryPoet 2003-05-07
  • 打赏
  • 举报
回复
你不会没有在InitInstance中调用AfxSocketInit()吧!呵呵
fbmsf 2003-05-07
  • 打赏
  • 举报
回复
来接分的。
Sander 2003-04-21
  • 打赏
  • 举报
回复
问题是明显的,你的socket没有建立成功,你就用这个socket call其他function.
hanzp 2003-04-21
  • 打赏
  • 举报
回复
to lichungen(阿根) :
我的 s = accept( myListenSocket, NULL, NULL); 是在我的ConnThread中的,每个线程中都有的。
我的监听线程错误是有时候我明明发了2个请求,可是它接收到了3个,结果创建第3个的时候就错误了
我不知道为什么。
我还发了个帖子的,里面写的清楚点,帮我看看吧。分数2个帖子一起算好了
http://expert.csdn.net/Expert/topic/1684/1684749.xml?temp=.3614771
lichungen 2003-04-20
  • 打赏
  • 举报
回复
s = accept( myListenSocket, NULL, NULL);
是不是在每个线程中都定义了s呢,如果没有的话,在s没有关闭前,又给它重新赋值就会产生异常。
你的监听线程错误是什么呢,发生在哪里呢?你讲详细点
hanzp 2003-04-18
  • 打赏
  • 举报
回复
我现在知道了,不是这里的问题,监听线程出错了。
当同时有多个请求连接时,我的监听SOCKET发生错误了。
这是为什么呢?
我的监听代码,能帮我看看吗?
s = socket( AF_INET, SOCK_STREAM, 0);

addr.sin_addr.s_addr = inet_addr( "210.28.66.244");
addr.sin_family = AF_INET;
addr.sin_port = htons(5000);

bind( s, (sockaddr*)&addr, sizeof(addr) );
listen(s, 10);

hEvent = WSACreateEvent();
lphEvents[0] = hEvent;
pEvent = new WSANETWORKEVENTS;

WSAEventSelect( s, hEvent, FD_ACCEPT|FD_CLOSE);

for(;;)
{
WSAWaitForMultipleEvents( 1, lphEvents, false, WSA_INFINITE, false);
WSAEnumNetworkEvents( s, hEvent, pEvent);

switch( pEvent->lNetworkEvents )
{
case FD_ACCEPT:

ShowInfo(hWnd, "收到连接请求");
pConnParam = new ConnParam;
pConnParam->hWnd = pListenParam->hWnd;
pConnParam->pListenSocket = &s;
AfxBeginThread( ConnThread, (LPVOID)pConnParam, THREAD_PRIORITY_NORMAL, 0, 0, NULL);

break;
case FD_CLOSE:
ShowInfo(hWnd, "停止监听");
break;
default:
ShowInfo(hWnd, "发生未知错误");
return EXIT_FAILURE;
}



}
谢谢,分数不够可以再加
hanzp 2003-04-18
  • 打赏
  • 举报
回复
我是用WSAEventSelect的,是只响应FD_ACCEPT 和FD_CLOSE;
每次有FD_ACCEPT,就生成一个连接线程,所有的send和recv都是在我的连接线程中进行的呀,监听套接字没有read的
雷大少爷 2003-04-18
  • 打赏
  • 举报
回复
为侦听套接字用WSAAsyncselect注册网络事件FD_READ,FD_CLOSE屏蔽码,在处理FD_READ 消息处理函数中作一下检验就ok了。
hanzp 2003-04-18
  • 打赏
  • 举报
回复
没有啊,程序是在
ASSERT( s != INVALID_SOCKET )
那里报错了的
wangzao 2003-04-18
  • 打赏
  • 举报
回复
你的accept后面肯定写了recv函数没有???如果写了,而服务器段没写send就会出现这种情况!

18,356

社区成员

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

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