运行总会有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(); }

解决方案 »

  1.   

    sockaddr_in m_addr;
    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;
    } 关掉防火墙等。
      

  2.   

    关了防火墙还是不行... 
    只想绑定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();
    }
      

  3.   

         
       看 WSAGetLastError() ;的返回值不就知道了,很有可能是端口被占用
      

  4.   

    WSAGetLastError()怎么用呢?他会把信息返回在哪里呢?
      

  5.   

    if((bind(sock,(PSOCKADDR)&addr_in,   sizeof(addr_in)))==SOCKET_ERROR) {  
    int errorcode = WSAGetLastError() ;
    printf( "bind   failed ,errorcode :%d",errorcode );  
    }  一般都是端口被占用,将错误ID,GOOGLE
      

  6.   

    addr_in.sin_addr  = *(struct in_addr*)pHostIP ->  h_addr_list[0]; 感觉绑的地址有问题,你直接绑 127.0.0.1 试试看
      

  7.   

    在该页面按 Ctrl+F 键 输入 结贴