运行总会有bind failed,而创建socket,WSAStartup调用都是成功的
到底是怎么回事呀?谁能帮帮我....
thanks in advance !
代码如下:#include <stdio.h>
//#include "ws2tcpip.h"
#include "winsock2.h"
#include "windows.h"
#pragma comment(lib, "ws2_32.lib")
void main()
{
struct hostent *pHostIP;
struct sockaddr_in addr_in;
WSADATA wsaData;
char hostname[128];
SOCKET sock;
BOOL flag= TRUE;
int err; err = WSAStartup(MAKEWORD(2,2),&wsaData);
if(err!=0) printf(" WSAStartup failed \n"); gethostname(hostname,128); if((pHostIP = gethostbyname(hostname)) == NULL) {
printf("\nGet hostbyname failed!\n");
} //建立原始socket
if(sock=(socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET) {
printf( "create socket failed!\n ");
}
addr_in.sin_addr = *(struct in_addr*)pHostIP -> h_addr_list[0];
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(6000); //把原始socket绑定到本地网卡上 sin_addr.S_un.S_ad
if((bind(sock,(PSOCKADDR)&addr_in, sizeof(addr_in)))==SOCKET_ERROR) {
printf( "bind failed ");
}
WSAGetLastError() ; printf("%s\n", hostname); WSACleanup(); }
到底是怎么回事呀?谁能帮帮我....
thanks in advance !
代码如下:#include <stdio.h>
//#include "ws2tcpip.h"
#include "winsock2.h"
#include "windows.h"
#pragma comment(lib, "ws2_32.lib")
void main()
{
struct hostent *pHostIP;
struct sockaddr_in addr_in;
WSADATA wsaData;
char hostname[128];
SOCKET sock;
BOOL flag= TRUE;
int err; err = WSAStartup(MAKEWORD(2,2),&wsaData);
if(err!=0) printf(" WSAStartup failed \n"); gethostname(hostname,128); if((pHostIP = gethostbyname(hostname)) == NULL) {
printf("\nGet hostbyname failed!\n");
} //建立原始socket
if(sock=(socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET) {
printf( "create socket failed!\n ");
}
addr_in.sin_addr = *(struct in_addr*)pHostIP -> h_addr_list[0];
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(6000); //把原始socket绑定到本地网卡上 sin_addr.S_un.S_ad
if((bind(sock,(PSOCKADDR)&addr_in, sizeof(addr_in)))==SOCKET_ERROR) {
printf( "bind failed ");
}
WSAGetLastError() ; printf("%s\n", hostname); WSACleanup(); }
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(6000); unsigned int s = (unsigned int )socket(AF_INET, SOCK_STREAM, 0);
if(SOCKET_ERROR == bind(s, (LPSOCKADDR)&m_addr, sizeof(m_addr)))
{
return 0;
}
if(SOCKET_ERROR == listen(s, 5))
{
return 0;
} 关掉防火墙等。
只想绑定socket,好象与listen 无关吧?
我的代码貌似与以上代码没有本质区别啊?
我把代码调整了一下可能方便看一点了,运行结果是:bind failed
press any key to continue
麻烦各位耐心看一下哈,
#include <stdio.h>
#include "winsock2.h"
#include "windows.h"
#pragma comment(lib, "ws2_32.lib")void main()
{
struct hostent *pHostIP;
struct sockaddr_in addr_in;
WSADATA wsaData;
char hostname[128];
SOCKET sock;
BOOL flag= TRUE;
int err;
DWORD dwValue = 1; err = WSAStartup(MAKEWORD(2,2),&wsaData);
if(err!=0) printf(" WSAStartup failed \n");
//取得ip地址
gethostname(hostname,128);
if((pHostIP = gethostbyname(hostname)) == NULL) {
printf("\nGet hostbyname failed!\n");
} //建立原始socket
if(sock=(socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET) {
printf( "create socket failed!\n ");
}
addr_in.sin_addr = *(struct in_addr*)pHostIP -> h_addr_list[0];
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(6000);
//把原始socket绑定到本地网卡上 sin_addr.S_un.S_ad
if((bind(sock,(PSOCKADDR)&addr_in, sizeof(addr_in)))==SOCKET_ERROR) {
printf( "bind failed \n");
}
WSAGetLastError() ;
WSACleanup();
}
看 WSAGetLastError() ;的返回值不就知道了,很有可能是端口被占用
int errorcode = WSAGetLastError() ;
printf( "bind failed ,errorcode :%d",errorcode );
} 一般都是端口被占用,将错误ID,GOOGLE