windows socket 编程:bind 错误码-1 如何解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows socket 编程:bind 错误码-1 如何解决?相关的知识,希望对你有一定的参考价值。
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.GetA... 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 展开
参考技术A 参考下面: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);
udpsocket编程不能bind网卡两次
参考技术A udpsocket编程当bind网卡两次之后电脑就会自动将代码清除,所以当编程的时候一定要保持网络通畅。以上是关于windows socket 编程:bind 错误码-1 如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
windows redis 连接错误Creating Server TCP listening socket 127.0.0.1:637 9: bind: No error