1

サーバーがポート 5000 でリッスンし、クライアントの発信ポートが 39000 である TCP サーバー/クライアントがあります。

サーバーに Stunnel をセットアップしました。

[custom]
accept  = 6000
connect = 5000

...ポート6000で接続を受け入れ、5000にリダイレクトします(私のServer.cがリッスンしています)。

次の方法でクライアントに STunnel をセットアップしようとしました。

[custom_cl]
accept = 39000
connect = 192.168.1.3:6000

...したがって、ポート 39000 からのデータを受け入れ、ポート 6000 でサーバー (192.168.1.3 にあるとしましょう) に送信します。

私のクライアントには次のコードがあります:

client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(39000);
client_addr.sin_addr.s_addr = inet_addr("0.0.0.0");
bzero(&(client_addr.sin_zero),8);

if (bind(sock, (struct sockaddr *)&client_addr, sizeof(struct sockaddr))
                                                               == -1) {
     perror("Unable to bind");
     exit(1);
     }

...常にポート 39000 で送信されるようにします。私の問題は、STunnel がポート 39000 でリッスンしているため、"Unable to bind: Address already in use" というメッセージが表示されることです。 ?

4

2 に答える 2

1

発信接続用にソケットをバインドする必要はありません (何を何のために行っているかがわかっている場合を除きます)。ソケットを作成して connect() を呼び出すだけです。宛先アドレスとして localhost (または 127.0.0.1) を渡し、宛先ポートとして 39000 を渡します。

于 2011-02-02T20:57:10.623 に答える
0

コードスニペットでは、接続のクライアント側をポートにバインドしています39000。そうしないでください。connect(2)@Eugineが彼の答えに書いているように発行してください。

于 2011-02-02T21:05:16.727 に答える