herstellen einer Verbindung zu einer IP-Adresse anstelle von localhost?

dies ist mein zweiter gehen bei dieser, die ich geschrieben habe, einer server-Anwendung wie unten, die Ausgänge, was der client sendet. Ich habe eine server.exe version, wo hört es auf, etwas über INADDR_ANY, getan zu Haben, ich kann mit meinem client und auf dem server verbinden, wenn ich geben Sie den client mit localhost verbinden (Was alles Prima funktioniert).

aber wenn ich meine eigene IP-Adresse statt "localhost" für den client, ich kann keine Verbindung zu dem server?. Sollte ich nicht in der Lage sein dem server zu verbinden, auf diese Weise?.

Nutzte ich ein weiteres server.exe das war hart codiert, um meine IP-Adresse, ohne INADDR_ANY aber es war nicht in der Lage zu bind() oder listen() auf eingehende verbindungen. Ich bin verwirrt, wie, um fortzufahren.

(Ich bin mit den server und client auf der gleichen Maschine befinden, ist das ein Problem?)

server

#include <iostream>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
using namespace std;

#define PORT 3490
#define IP "118.93.0.164"
#define BACKLOG 10

const int winsockversion = 2;

int main(void){
    WSADATA wsadata;
    if ( (WSAStartup(MAKEWORD(winsockversion,0),&wsadata)) == 0){
        cout<<"-WSAStartup Initialized." << endl;

        struct sockaddr_in serv;
        memset(&serv,0,sizeof serv);
        serv.sin_family = AF_INET;
        serv.sin_port = htons(PORT);
        serv.sin_addr.s_addr = inet_addr(IP);//INADDR_ANY;//inet_addr(IP);
        //---------------------------------------
        struct addrinfo serv_addrinfo;
        serv_addrinfo.ai_family = AF_INET;
        serv_addrinfo.ai_socktype = SOCK_STREAM;
        serv_addrinfo.ai_protocol = IPPROTO_TCP;
        serv_addrinfo.ai_addrlen = sizeof(serv);
        serv_addrinfo.ai_addr = (sockaddr*)&serv;


        //---------------------------------------
        SOCKET serv_con;
        serv_con = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if (serv_con != INVALID_SOCKET){
            cout<<"-Server Socket created." << endl;
        }

        if (bind(serv_con,serv_addrinfo.ai_addr,serv_addrinfo.ai_addrlen) != -1){
            cout<<"-Binding Successful." << endl;
        }

        if( listen(serv_con,BACKLOG) != -1){
            cout<<"-Listening for incoming connections." << endl;
        }
        //--------------------------------------------------------------------
        SOCKET recv_socket;
        struct sockaddr_in client_info;
        int client_info_size = sizeof(client_info);

        char *con_addr = inet_ntoa(client_info.sin_addr);




        recv_socket = accept(serv_con,(sockaddr*)&client_info,&client_info_size);

        if( recv_socket != INVALID_SOCKET ){
            cout<<"-Connection Established!. " << endl;
            cout<<"-Connected to: [" << con_addr << "] " << endl;
        //----------------------------------------------------------------------
            char buffer[80];
            int bytes_in;
            while(true){

                bytes_in = recv(recv_socket,buffer,sizeof(buffer),0);
                if ( bytes_in > 0 ){
                    cout<<"[" << con_addr << "]" << buffer << endl;
                }

                if (bytes_in == 0 ){
                    cout<<"[" << con_addr << "] has disconnected." << endl;
                    break;
                }
                if (bytes_in == -1 ){
                    cout<<"-Possible Abrupt disconnecton from [" << con_addr << "]" << endl;
                    break;
                }
            }

            closesocket(recv_socket);
            closesocket(serv_con);

        }

    }else{
        cout<<"-WSAStartup Initialization failed." << endl;
    }

    if( WSACleanup()!= -1){
        cout<<"-WSACleanp Successful." << endl;
    }

    WSAGetLastError();


    return 0;
}

client

/*client*/
#define _WIN32_WINNT 0x501
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
using namespace std;

#define PORT "3490"
#define SERVER "118.93.0.164" //and localhost 
const int winsockVersion = 2;


int main(void){

    WSADATA wsadata;
    if ( (WSAStartup(MAKEWORD(2,0),&wsadata)) == 0){
        cout<<"-WSAStartup Initialized." << endl;

        struct addrinfo hints, *res;
        int sockfd;

        memset(&hints,0,sizeof hints);
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;

        if (getaddrinfo(SERVER,PORT,&hints,&res) != 0){
            cout<<"-getaddrinfo unsuccessful." << endl;
        }

        if ( (sockfd = socket(res->ai_family,res->ai_socktype,res->ai_protocol)) == -1 ){
            cout<<"-Unable to create socket." << endl;
        }

        if ( (connect(sockfd,res->ai_addr,res->ai_addrlen)) != -1 ){
            cout<<"-Connection Established." << endl;
        }

        cout<<"-Client connecting to: " << res->ai_addr << endl;

        while(true){
            string text_buff;
            cout<<"Enter text: ";
            getline(cin,text_buff);
            if( (send(sockfd,text_buff.c_str(),text_buff.length()+1,0)) != -1 ){
                cout<<"-text_buff sent!." << endl;
            }

        }

    }else{
        cout<<"-WSAStartup Initialization failed." << endl;
        if(WSACleanup()!=0){
            cout<<"-WSACleanup Successful." << endl;
        }else{
            cout<<"-WSACleanup Failed." << endl;
        }
    }

    return 0;
}
  • laufen server und client auf der gleichen Maschine ist definitiv NICHT ein Problem. Ich vermute, dass die IP-Adresse, die Sie verwenden, ist nicht wirklich die Adresse Ihrer Maschine besitzt. hat Ihr server hat die öffentliche Adresse? oder die private Adresse? Sind Sie sicher, dass Sie die IP-Adresse gemeldet von ipconfig Befehl?
  • Sie sind Recht seinem keine meiner Maschinen eine IP-Adresse ist die IP-Adresse von meinem ISP. Ich habe mehrere Computer über wifi verbunden, ich war versucht, eine Verbindung zu meiner externen IP (wenn das der name für die IP-Adresse gegeben, die von meinem ISP?).
  • wie kann ich eine Verbindung zu einem ISP angegebene IP-Adresse und lösen die lokale Adresse, die der server am laufen?. (sorry, nicht vertraut mit dem jargon noch).
InformationsquelleAutor silent | 2010-11-24
Schreibe einen Kommentar