windows socket 编程:bind 错误码-1 如何解决?

m_socket=socket(AF_INET,SOCK_STREAM,0);if(INVALID_SOCKET==m_socket){MessageBox(_T("套接... m_socket=socket(AF_INET,SOCK_STREAM,0);
if (INVALID_SOCKET==m_socket)
{
MessageBox(_T("套接字创建失败"));
return;
}
Server _Server;
_Server.m_ip[4]=NULL;
_Server.m_port=0;
m_IP.GetAddress(_Server.m_ip[0],_Server.m_ip[1],_Server.m_ip[2],_Server.m_ip[3]);
_Server.m_port=GetDlgItemInt(IDC_EDIT_Port,NULL,TRUE);
SOCKADDR_IN _sockaddr;
_sockaddr.sin_family=AF_INET;
_sockaddr.sin_port=htons(_Server.m_port);
_sockaddr.sin_addr.S_un.S_addr=_Server.m_ip[4];
int _bind=bind(m_socket,(SOCKADDR*)&_sockaddr,sizeof(SOCKADDR));
if (SOCKET_ERROR==_bind)
{
CString _errormsg;
closesocket(m_socket);
_errormsg.Format(_T("绑定失败,错误码:%d"),_bind);
MessageBox(_errormsg);
return ;
}
什么地方错了,我没找到,反正端口是1024时死程序,其他的是失败返回-1.
急用呀!!
我感觉是_sockaddr.sin_addr.S_un.S_addr=_Server.m_ip[4];这句错了,但应该怎么转换呢?
我用的是IP Address Control
展开
 我来答
rexen狼主
2012-11-05
知道答主
回答量:5
采纳率:0%
帮助的人:5.7万
展开全部
参考下面:

SOCKET server_socket;
SOCKADDR_IN internet_addr;
int ret, error, addr_len;
PROXY_SOCK_PARAM_T *_param;

HANDLE hThread;
unsigned int thid;

// 创建 socket
server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(server_socket == INVALID_SOCKET) /* 调用 socket 不成功, 返回 INVALID_SOCKET,
调用 WSAGetLastError() 可查看错误代码 */
{
error = WSAGetLastError();
// TODO: 错误处理
return 0;
}

// 进行 Socket 绑定
internet_addr.sin_family = PF_INET;
internet_addr.sin_port = htons(PROXY_SERVER_PORT);
internet_addr.sin_addr.s_addr = htonl(INADDR_ANY);
ret = bind(server_socket, (SOCKADDR *)&internet_addr, sizeof(internet_addr));
if(ret != 0) /* bind 成功返回 0. 否则返回 SOCKET_ERROR, 调用 WSAGetLastError() 可查看错误代码 */
{
error = WSAGetLastError();
closesocket(server_socket);
// TODO: 错误处理
return 0;
}

// 在 socket 上进行监听
ret = listen(server_socket, 128); /* listen 成功返回 0. 否则返回 SOCKET_ERROR,
调用 WSAGetLastError() 可查看错误代码 */
if(ret != 0)
{
error = WSAGetLastError();
closesocket(server_socket);
// TODO: 错误处理
return 0;
}
std::cout << "[PROXY-SERVR] 端口 5200 监听启动..." << std::endl;
// 接收来自客户端的请求
for(;;)
{
// 组织传递给新线程的数据结构
_param = (PROXY_SOCK_PARAM_T *)malloc(sizeof(PROXY_SOCK_PARAM_T));
_param->server_socket = server_socket;
addr_len = sizeof(_param->client_addr);
_param->client_socket = accept( _param->server_socket,
(SOCKADDR *)&(_param->client_addr),
&(addr_len));

if(_param->client_socket == INVALID_SOCKET)
{
error = WSAGetLastError();
// TODO: 错误处理
} else {
// 创建工作线程
hThread = (HANDLE)_beginthreadex(NULL, 0, server_work_thread, (void *)_param, 0, &thid);
if(hThread == INVALID_HANDLE_VALUE)
{
free(_param);
} else {
CloseHandle(hThread);
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式