【问题标题】:How to use STunnel for TCP Server/Client where Client sends out on port 39000如何将 STunnel 用于 TCP 服务器/客户端,客户端在端口 39000 上发送
【发布时间】:2011-02-03 05:05:16
【问题描述】:

我有一个 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 的任何数据并将其发送到端口 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。应该我在做什么?

【问题讨论】:

    标签: sockets tcp client stunnel


    【解决方案1】:

    您不需要为传出连接绑定套接字(除非您知道自己在做什么和做什么)。您只需要创建一个套接字并调用 connect()。您将 localhost(或 127.0.0.1)作为目标地址,将 39000 作为目标端口。

    【讨论】:

      【解决方案2】:

      在您的代码 sn-p 中,您将连接的 客户端 端绑定到端口 39000。不要那样做。只需按照@Eugine 在他的回答中写的那样发出connect(2)

      【讨论】:

        猜你喜欢
        • 2017-07-16
        • 2017-07-10
        • 1970-01-01
        • 2013-07-25
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        相关资源
        最近更新 更多