Как использовать STunnel для TCP-сервера / клиента, где клиент отправляет через порт 39000 - PullRequest
1 голос
/ 02 февраля 2011

У меня есть TCP-сервер / клиент, где сервер прослушивает порт 5000, а исходящий порт клиента - 39000.

У меня настроен Stunnel на сервере:

[custom]
accept  = 6000
connect = 5000

... поэтому он принимает подключения через порт 6000 и перенаправляет его на номер 5000 (который прослушивает мой Server.c).

Я попытался настроить STunnel на клиенте следующим образом:

[custom_cl]
accept = 39000
connect = 192.168.1.3:6000

... поэтому он принимает любые данные с порта 39000 и отправляет их на сервер (скажем, на 192.168.1.3) на порт 6000.

Мой клиент имеет этот код:

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. Я буду делать?

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Вам не нужно связывать сокет для исходящего соединения (если вы не знаете, что делаете и для чего). Вам просто нужно создать сокет и вызвать connect (). Вы передаете localhost (или 127.0.0.1) в качестве адреса назначения и 39000 в качестве порта назначения.

0 голосов
/ 03 февраля 2011

В своем фрагменте кода вы привязываете сторону клиента к порту 39000.Не делай этого.Просто введите connect(2), как пишет @Eugine в своем ответе.

...