2017-05-31 7 views
0

私は、TCPソケットを介して互いにプロセスに接続しようとしています。Python/C++リモートTCPソケット

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("localhost", 11111)) 

サーバ側が他の人によって書かれ、C++で実装されています。両方のプロセスは、クライアント側(のpythonのプロセス)で実行してローカルで実行されているとき、私は成功し、これを行っています。

#define WIDTH 640 
#define HEIGHT 480 
#define DEPTH 3 
#define BUFS (WIDTH*HEIGHT*DEPTH) 
int sockfd, newsockfd, portno; 
struct sockaddr_in serv_addr, cli_addr; 
socklen_t clilen; 

void netx_setup() 
{  
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) 
     error("ERROR opening socket"); 
    bzero((char *) &serv_addr, sizeof(serv_addr)); 
    portno = 11111; 
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_addr.s_addr = INADDR_ANY; 
    serv_addr.sin_port = htons(portno); 
    if (bind(sockfd, (struct sockaddr *) &serv_addr, 
       sizeof(serv_addr)) < 0) 
       error("ERROR on binding"); 
    listen(sockfd,5); 
    clilen = sizeof(cli_addr); 

    std::cout<<"Waiting for connection\n"; 
    newsockfd = accept(sockfd, 
       (struct sockaddr *) &cli_addr, 
       &clilen); 
     if (newsockfd < 0) 
       { 
       std::cout<<"No connection!\n"; 
       newsockfd=0; 
       } 
} 

ただし、クライアントがMicrosoft Azure VMインスタンスで実行されている間は、ローカルマシンでサーバープロセスを実行する必要があります。接続が完了したらすべてを処理するために必要なコードをすべて用意していますが、ソケットを設定する方法についてはわかりません。どんな助けでも大歓迎です!

+2

サーバーは正常に動作するはずです。 '' localhost''をクライアントコードのAzureホストのアドレスに置き換えてください。リモート接続を可能にするためにサーバー上にファイアウォールを設定する必要があるかもしれませんが、その方法は[SuperUser](https://superuser.com/)のようなものです。 –

+0

だから*あなたは何を求めているのですか? –

+0

@JesperJuhlクライアントプロセスをAzure VMに移動する必要があります。これを行うには、クライアントプロセスコードを変更して、C++サーバーが見つかるようにする必要があると思います。私は、クライアントの接続を変更する際の指針を求めています。 Milesさんの提案によると、 "localhost"を自分のVMインスタンスのIPアドレスに変更し、ポート上のインバウンド/アウトバウンドトラフィックを有効にしましたが、接続はまだ失敗しています。 – Kevin

答えて

0

あなたの説明によると、自分のローカルマシンにC++サーバープロセスを展開し、PythonクライアントをAzure VMに展開して相互に通信させたいと思っています。したがって、これは古典的なC/S通信モデルです。ローカルマシンにWAN ipがある場合は、クライアントをサーバー側に接続することができます。そうでない場合は、独自のVPN VIPを介して2つのプロセスと通信するためにAzure VPN Gatewaycreate a Site-to-Site connectionを作成する必要があります。

希望します。