有一台服务器不停向客户端发送消息,
当客户端接受到消息后,要给服务器作出回应,我需要怎么做啊?
是不是要获取服务器的IP和端口号?然后发送消息.
但是我要怎么获取服务器的IP和端口号?
希望知道的朋友多多指教,我刚刚接触网络编程,很多东西不明白,
希望你们细点告诉我,谢谢!

解决方案 »

  1.   

    如果是TCP连接,必须是客户端首先连接到服务器,这时会得到一个连接到服务器的SOCKET句柄,调用WSASend()可以向服务器发送消息。UDP连接也类似。作为客户端应该知道服务器的IP地址和端口号。另:得到一个已建立连接的对方地址可以用getpeername()
      

  2.   

    老兄,即然是服务器,其ip和port当然由运营者公开啦
      

  3.   

    客户端要访问服务端需要知道服务端的ip和port啊,这个一般是提供的
      

  4.   

    client server应该是互相知道的不光server的port ,ip addr,而且还要知道通讯的协议等等才能通讯
      

  5.   

    你的目的是:当客户端接受到消息后,要给服务器作出回应前者就已经知道了服务器的IP了,后者直接根据前者的IP,PORT发消息即可
      

  6.   

    只要能收到消息,就能得到发消息一方的ip和port。
    socket的接收函数有这些参数用于带回ip和port的,看看MSDN。
      

  7.   

    GetSockName   Call this member function to get the local name for a socket.
    GetPeerName   Call this member function to get the address of the peer socket  to   which this socket is connected.
      

  8.   

    我列一个小程序给你看了,你就明白了.刚好是我以前学过的.
    /*-------------------------------------------------
        tcpsrv.cpp 服务端主程序
        code:Huai_Huai  2005.9.13
    --------------------------------------------------*/
    #include <winsock2.h>
    #include <stdio.h>void main()
    {
        WORD wVersionRequested;
        WSADATA wsaData;
        int Err;
        wVersionRequested=MAKEWORD(2,2);
        Err=WSAStartup(wVersionRequested,&wsaData);
        if (Err!=0)
        {
            return;
            MessageBox(0,TEXT("1"),NULL,0);
        }
        
        if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
        {
            WSACleanup();
            MessageBox(0,TEXT("2"),NULL,0);
            return;
        }    SOCKET socksrv=socket(PF_INET,SOCK_STREAM,0);
        if(socksrv==INVALID_SOCKET)
        {
            WSACleanup();
            MessageBox(0,TEXT("3"),NULL,0);
            return;
        }
        SOCKADDR_IN addrSrv;
        addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
        addrSrv.sin_family=AF_INET;
        addrSrv.sin_port=htons(6000);    bind(socksrv,(sockaddr *)&addrSrv,sizeof(SOCKADDR));
        listen(socksrv,5);    SOCKADDR_IN addrClient;
        int len=sizeof(SOCKADDR);
        while(1)
        {        
            SOCKET sockconn=accept(socksrv,(sockaddr *)&addrClient,&len);
            char sendBuf[100];
            sprintf(sendBuf,"Welcome %s to http://www.520160.com",
                inet_ntoa(addrClient.sin_addr));
            send(sockconn,sendBuf,strlen(sendBuf)+1,0);
            char recvBuf[100];
            recv(sockconn,recvBuf,100,0);
            printf("%s\n",recvBuf);
            closesocket(sockconn);        
        }
        WSACleanup();
    }/*-------------------------------------------------
        tcpclient.cpp 客户端主程序
        code:Huai_Huai  2005.9.13
    --------------------------------------------------*/
    #include <winsock2.h>
    #include <stdio.h>void main()
    {
        WORD wVersionRequested;
        WSADATA wsaData;
        int Err;    wVersionRequested=MAKEWORD(2,2);
        Err=WSAStartup(wVersionRequested,&wsaData);
        if (Err!=0)
            return;
        if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
        {
            WSACleanup();
            return;
        }
        SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);    SOCKADDR_IN addrSrv;
        addrSrv.sin_family=AF_INET;
        addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.88");
        addrSrv.sin_port=htons(6000);
        connect(sockClient,(sockaddr *)&addrSrv,sizeof(SOCKADDR));    char sendBuf[100];
        sprintf(sendBuf,"I love jie");
        send(sockClient,sendBuf,100,0);    char recvBuf[100];
        recv(sockClient,recvBuf,100,0);
        printf("%s",recvBuf);    closesocket(sockClient);
        WSACleanup();
    }
      

  9.   

    我觉得你还没有理解网络上收发数据的含义
    所谓服务端就是公布IP地址和端口的一台机器,等待着为别的clinet提供服务
    如果某clinet需要服务
    就去连接该服务端的对应端口,所以这些东西是你作为客户端或者客户端程序编写者应该知道的
    楼上所说的获得方法
    是指在程序中动态获得的方法
    如getpeername需要发生在连接建立以后