代码如下:
#include <stdio.h>
#include <winsock2.h>
#include "SOCKET_OBJ.h"
#include "PTHREAD_OBJ.h"
#pragma comment(lib,"WS2_32")int main()
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if (::WSAStartup(sockVersion,&wsaData)!=0)
{
exit(0);
}
USHORT nPort=4567;
SOCKET sListen=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(nPort);
sin.sin_addr.S_un.S_addr=INADDR_ANY;
if(::bind(sListen,(sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("Failed bind() \n");
printf("%d",WSAGetLastError());
return -1;
}
::listen(sListen,200);
WSAEVENT event=::WSACreateEvent();
::WSAEventSelect(sListen,event,FD_ACCEPT|FD_CLOSE);
::InitializeCriticalSection(&g_cs);
while (TRUE)
{
int nRet=::WaitForSingleObject(event,5*1000);
if (nRet==WAIT_FAILED)
{
printf("Failed WaitForSingleObject() \n");
break;
}
else if (nRet==WSA_WAIT_TIMEOUT)
{
printf("\n");
printf("TatolConnections:%d \n",g_nTatolConnections);
printf("CurrentConnections:%d \n",g_nCurrentConnection);
continue;
}
else
{
......
}
}
::DeleteCriticalSection(&g_cs);
return 0;
}运行程序的时候总是超时,也就是nRet总是是等于WSA_WAIT_TIMEOUT,不知道为什么?我用客户端向此服务端发送数据,服务端似乎无法收到连接请求!如果有收到连接,应该是执行else里面的代码!所以问题应该出现在
nRet=::WaitForSingleObject(event,5*1000);
返回是WSA_WAIT_TIMEOUT这里!但是为什么是返回WSA_WAIT_TIMEOUT?
#include <stdio.h>
#include <winsock2.h>
#include "SOCKET_OBJ.h"
#include "PTHREAD_OBJ.h"
#pragma comment(lib,"WS2_32")int main()
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2);
if (::WSAStartup(sockVersion,&wsaData)!=0)
{
exit(0);
}
USHORT nPort=4567;
SOCKET sListen=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(nPort);
sin.sin_addr.S_un.S_addr=INADDR_ANY;
if(::bind(sListen,(sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("Failed bind() \n");
printf("%d",WSAGetLastError());
return -1;
}
::listen(sListen,200);
WSAEVENT event=::WSACreateEvent();
::WSAEventSelect(sListen,event,FD_ACCEPT|FD_CLOSE);
::InitializeCriticalSection(&g_cs);
while (TRUE)
{
int nRet=::WaitForSingleObject(event,5*1000);
if (nRet==WAIT_FAILED)
{
printf("Failed WaitForSingleObject() \n");
break;
}
else if (nRet==WSA_WAIT_TIMEOUT)
{
printf("\n");
printf("TatolConnections:%d \n",g_nTatolConnections);
printf("CurrentConnections:%d \n",g_nCurrentConnection);
continue;
}
else
{
......
}
}
::DeleteCriticalSection(&g_cs);
return 0;
}运行程序的时候总是超时,也就是nRet总是是等于WSA_WAIT_TIMEOUT,不知道为什么?我用客户端向此服务端发送数据,服务端似乎无法收到连接请求!如果有收到连接,应该是执行else里面的代码!所以问题应该出现在
nRet=::WaitForSingleObject(event,5*1000);
返回是WSA_WAIT_TIMEOUT这里!但是为什么是返回WSA_WAIT_TIMEOUT?
解决方案 »
- Radio控件得到焦点时不响应得到焦点的函数
- 关于在datagrid控件中设置下拉列表 vc6.0中如何实现
- 怎样修改CPropertySheet标签文字的颜色?
- 在DLL中如何调用ocx控件?
- 准备在这个版面自问自答几个FAQ,不知版主同意否?
- vc的程序可不可以 转换成vb程序!大哥们帮忙!!
- bmp图像的象素统计问题.请给各位费心解答一下.
- ActiveX插件 VISTA兼容问题
- <<Programming Windows95 with MFC>>(Charles Petzold )有无中译本
- 位图是怎样加入view框架的?
- 检测设备问题 (大家帮个忙!!)
- Debug里编译没错Release编译出错了
另外.用netstat -ano命令查看得到以下结果:我的客户端使用的端口是4581,从图中可以看出,服务端的端口接收到了连接请求,但是event事件就是没有被触发,莫名其妙!
listen返回值是0,表示成功!
另外.用netstat -ano命令查看得到以下结果: 我的客户端使用的端口是4581,从图中可以看出,服务端的端口接收到了连接请求,但是event事件就是没有被触发,莫名其妙!