我在写一个SERVER端的测试程序了,非常简单的,其中: //使用端口号5050来命名服务器的Sockets
server.sin_family=AF_INET;
server.sin_port=htons(5050);
server.sin_addr.S_un.S_un_b.s_b1=202;
server.sin_addr.S_un.S_un_b.s_b2=115;
server.sin_addr.S_un.S_un_b.s_b3=111;
server.sin_addr.S_un.S_un_b.s_b4=222; if ( bind(socketid, (sockaddr *)&server,sizeof(server))<0)
{
perror("there is error in binding sockets\n");
return 3;
}结果程序输出就是:there is error in binding sockets是不是我的IP有错误?! 可是我在TCP、IP属性里面设定的是:202.115.111.222 呀,会是哪里的错误呢?!  拜托各位讲给我解决办法。 :) 谢谢!

解决方案 »

  1.   

    把server.sin_addr.S_un.S_un_b.s_b1=202;
      server.sin_addr.S_un.S_un_b.s_b2=115;
      server.sin_addr.S_un.S_un_b.s_b3=111;
      server.sin_addr.S_un.S_un_b.s_b4=222;
    改成
    server_addr.sin_addr.S_un.S_addr=INADDR_ANY;
    试一试
      

  2.   

    bind(socketid, (sockaddr *)&server,sizeof(sockaddr))
      

  3.   

    我猜想是你 server client bind到了同一个 ip同意changmangke(环顾四方) ( ) 信誉:100
      

  4.   

    server_addr.sin_addr.S_un.S_addr=INADDR_ANY;这一句中的 INADDR_ANY 是头文件中定义到的一个常量么?它的值是多少?在这里代表什么意思?  :)
      

  5.   

    把代码改成:
             //使用端口号5050来命名服务器的Sockets
    server.sin_family=AF_INET;
    server.sin_port=htons(5050); server_addr.sin_addr.S_un.S_addr=INADDR_ANY;编译的时候出现了如下错误:e:\My Documents\简单server\server.cpp(56) : error C2065: 'server_addr' : undeclared identifiere:\My Documents\简单server\server.cpp(56) : error C2228: left of '.sin_addr' must have class/struct/union typee:\My Documents\简单server\server.cpp(56) : error C2228: left of '.S_un' must have class/struct/union typee:\My Documents\简单server\server.cpp(56) : error C2228: left of '.S_addr' must have class/struct/union typee:\My Documents\简单server\server.cpp(89) : warning C4806: '==' : unsafe operation: no value of type 'bool' promoted to type 'const int' can equal the given constantError executing cl.exe.server.exe - 4 error(s), 1 warning(s)
    我再好好看看~ :)  麻烦各位老师也帮忙指出错误的修改方法;
      

  6.   

    server_addr.sin_addr.S_un.S_addr=INADDR_ANY;
    表示自动填入本机IP地址,在winsock2.h中声明如下:
    #define INADDR_ANY  (u_long)0x00000000
      

  7.   

    你的server_addr是怎么声明的?
      

  8.   

    呵呵~ 真抱歉刚才我没有仔细看你给我的代码我就复制上去了,我并没有定义server_addr,而是server  :)这样就可以了:server.sin_addr.S_un.S_addr=INADDR_ANY;通过编译,可是问题依然和我开始问的一样,程序输出:there is error in binding sockets奇怪呀!:(  会不会是我本地的IP设置有问题?不过客户端程序可以按本地IP连通呀。
      

  9.   

    你试一试这个,以前刚学的时候写的,不是太完善,但是可以用#include"stdafx.h"
    #include<iostream.h>
    #include<Winsock2.h>
    #include<stdio.h>void main()
    {
    SOCKET socketid;
    struct sockaddr_in server_addr;
    SOCKET msgsocket;
    char buffer[1024];
    int rval;
    int i; WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested=MAKEWORD(1,1);
    err=WSAStartup(wVersionRequested,&wsaData);
    if(err!=0)
    {
    perror("there is no DLL to use");
    return;
    } if((LOBYTE(wsaData.wVersion)!=1) || (HIBYTE(wsaData.wVersion)!=1))
    {
    perror("there is not right DLL");
    WSACleanup();
    return;
    } socketid=socket(AF_INET, SOCK_STREAM, 0);
    if(socketid==INVALID_SOCKET)
    {
    perror("there is error in opening sockets\n");
    return;
    } server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(5050);
    server_addr.sin_addr.S_un.S_addr=INADDR_ANY;
    if(bind(socketid,(sockaddr*)&server_addr,sizeof(server_addr))<0)
    {
    perror("there is error in binding sockets\n");
    return;
    } int length=sizeof(server_addr);
    if(getsockname(socketid,(struct sockaddr *)&server_addr,&length)<0)
    {
    perror("there is error in getting name");
    return;
    }
    printf("socket port %d\n",ntohs(server_addr.sin_port));
    listen(socketid,2); do
    {
    msgsocket=accept(socketid,(struct sockaddr*)&server_addr,&length);
    if(msgsocket==INVALID_SOCKET)
    {
    perror("there is error in open new sockets");
    break;
    }
    else do
    {
    memset(buffer,0,sizeof(buffer));
    rval=recv(msgsocket,buffer,1024,0);
    if(rval<0)
    {
    perror("there is error in recving");
    break;
    }
    if(rval==0)
    {                        break;

    }
    else 
    {
    if(buffer[0]=='q' || buffer[0]=='Q')
    {
    closesocket(socketid);
    WSACleanup();
    return;
    }
    //cout<<"-->"<<buffer<<endl; printf("%s\n",buffer); for(i=0;i<1024;i++)
    {
    if(islower(buffer[i]))
    buffer[i]=buffer[i]-32;
    else if(isupper(buffer[i]))
    buffer[i]=buffer[i]+32;
    }
    if((send(msgsocket,buffer,sizeof(buffer),0))<0)
    {
    perror("there is error in echoing the data");
    break;
    } else
    {
    cout<<"Echoing successfully."<<endl;
    }
    }


    }while(rval!=0);
    closesocket(msgsocket);
    }while(TRUE);
    }
      

  10.   

    客户端的程序: Client.exe
    它的用法是 Client +主机名 +端口号我这样运行它: Client lee 5050
    运行结果: Success send message!可是服务器端的程序也按这个IP怎么会出现错误? 怎么回事呢?
      

  11.   

    changmangke(环顾四方) 老师! 我用你给我的代码生成EXE文件,运行问题依旧!  你说我的问题会出现在什么地方么?程序似乎没有问题……对了,我可以加你的QQ么? 我的是:25397931