BOOL CServerDlg::InitNetwork()
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,1), &wsaData) != 0)
{
WSACleanup();
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}
ServerSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(ServerSocket == INVALID_SOCKET)
{
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("创建套接字失败!");
return FALSE;
}
sockaddr_in localAddr;
//memset((void*)&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(8888);
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
WSAStartup(MAKEWORD(2,1), &wsaData);
if(bind(ServerSocket, (struct sockaddr*)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
{
//就在这里绑定不起,错误代码为10049
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("绑定地址失败!");
return FALSE;
} if(WSAAsyncSelect(ServerSocket, m_hWnd, NETWORK_EVENT, FD_ACCEPT|FD_READ|FD_CLOSE)
== SOCKET_ERROR)
{
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("注册网络异步事件失败!");
return FALSE;
} if(listen(ServerSocket, 5) == SOCKET_ERROR)
{
closesocket(ServerSocket);
AfxMessageBox("设置监听失败!");
WSACleanup();
return FALSE;
} return TRUE;
}
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,1), &wsaData) != 0)
{
WSACleanup();
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}
ServerSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(ServerSocket == INVALID_SOCKET)
{
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("创建套接字失败!");
return FALSE;
}
sockaddr_in localAddr;
//memset((void*)&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(8888);
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
WSAStartup(MAKEWORD(2,1), &wsaData);
if(bind(ServerSocket, (struct sockaddr*)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
{
//就在这里绑定不起,错误代码为10049
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("绑定地址失败!");
return FALSE;
} if(WSAAsyncSelect(ServerSocket, m_hWnd, NETWORK_EVENT, FD_ACCEPT|FD_READ|FD_CLOSE)
== SOCKET_ERROR)
{
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("注册网络异步事件失败!");
return FALSE;
} if(listen(ServerSocket, 5) == SOCKET_ERROR)
{
closesocket(ServerSocket);
AfxMessageBox("设置监听失败!");
WSACleanup();
return FALSE;
} return TRUE;
}
解决方案 »
- 如何改变slider背景颜色??
- 下载网页时怎样只下载文字内容而不下载图片flash等?
- 在TCP写一个服务器 accept问题
- 怎样用软件仿真玩具动作?
- 谁能给我们一份有关Word文件格式的资料?[email protected]
- 在DLL中如何添加插入菜单代码?
- 怎么实现在Dialog界面任意点按住鼠标拖动就能移动对话框?
- 关于msdn的安装
- 'CObject' : base class undefined ?
- (迫切)如何同时显示dll中的对话框,和调用该dll的MFC应用自身的对话框?
- 一个关于虚拟桌面到一个窗口的难题, 请提供线索。
- CFile.GetLength()给一个int变量赋值,运行时程序总是意外终止。编程环境vista下vs2005。
{
WSACleanup();
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}
改称
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
WSACleanup();
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}ServerSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
改称ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//memset((void*)&localAddr, 0, sizeof(localAddr));
去掉注释,并改成 memset(&localAddr, 0, sizeof(localAddr));把bind前边一行的 WSAStartup(MAKEWORD(2,1), &wsaData);注释掉在试一下
bind前边一行的WSAStartup(MAKEWORD(2,1), &wsaData);本来是没有的如果我把防火墙关了,就可以运行
现在是我如何穿透防火墙
BOOL CServerDlg::InitNetwork()
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,1), &wsaData) != 0)
{
WSACleanup();
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}ServerSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(ServerSocket == INVALID_SOCKET)
{
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("创建套接字失败!");
return FALSE;
}
sockaddr_in localAddr;
//memset((void*)&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(8888);
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(ServerSocket, (struct sockaddr*)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
{
//就在这里绑定不起,错误代码为10049
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("绑定地址失败!");
return FALSE;
}if(WSAAsyncSelect(ServerSocket, m_hWnd, NETWORK_EVENT, FD_ACCEPT|FD_READ|FD_CLOSE)
== SOCKET_ERROR)
{
closesocket(ServerSocket);
WSACleanup();
AfxMessageBox("注册网络异步事件失败!");
return FALSE;
}if(listen(ServerSocket, 5) == SOCKET_ERROR)
{
closesocket(ServerSocket);
AfxMessageBox("设置监听失败!");
WSACleanup();
return FALSE;
}return TRUE;
}当我防火墙开起的时候就bind不起error 10049
而防火墙关了就能正常绑定
我看别人的程序开不开防火墙都能运行啊
好象都是WSAStartup
socket
bind
listen
...
{
WSACleanup();
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}
改称
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
AfxMessageBox("初始化网络协议失败!");
return FALSE;
}#ServerSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
改称ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);#//memset((void*)&localAddr, 0, sizeof(localAddr));
去掉注释,并改成 memset(&localAddr, 0, sizeof(localAddr));#在bind前边加上2行
const int on = 1;
setsockopt(ServerSocket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));#去掉所有对WSACleanup();的调用
我记得昨天刚运行的时候防火墙是提示了一下
谢谢anjuta_c的参与