2011-02-02 4 views
1

У меня есть TCP сервер/клиент, где сервер прослушивает порт 5000 и исходящий порт Клиент 39000.Как использовать Stunnel для TCP сервер/клиент, где клиент посылает на порт 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. Моя проблема заключается в том, что я получаю «Невозможно связать: Адрес уже в и se ", потому что (я предполагаю) STunnel слушает порт 39000. Что мне делать?

ответ

1

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

+0

Спасибо вам большое! – Eddie

0

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