6

我正在阅读此处的 C 网络编程简单教程: https ://beej.us/guide/bgnet/html/multi/index.html

看完之后,我的计划是实现一个测试客户端/服务器程序,然后开始玩,修改东西,添加东西等等。我实现了这里找到的程序(第一个处理 TCP 连接的客户端/服务器集) : https ://beej.us/guide/bgnet/html/multi/clientserver.html

基本上,“服务器”运行在一台机器上,当客户端连接时,服务器只发送“Hello, world!”。当我在同一台机器上运行两者并连接到本地主机时,这工作正常。

但是,我无法在不同的机器之间连接(在 Debian 和 OpenBSD 服务器上都试过,没有 iptables/pf 规则集)。连接只是超时,我不确定为什么。我可以 ping 和 ssh 进入两者。

任何人,特别是熟悉本教程的任何人,都可以为我指明正确的方向吗?

编辑:服务器上没有 X,所以没有截图,但是 netstat -tlnp | grep 3490 什么也没给我。

netstat -an 显示在 3490 上侦听的 tcp 连接。

4

2 回答 2

1

if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {打印出p->ai_addr我打赌它的值之前,它是 127.0.0.1。这将导致通信在一台计算机上正常工作,但不会发生在其他任何地方。

要监听所有接口,请绑定 0.0.0.0。

于 2012-05-11T07:12:50.143 回答
1

我没有看到您的 servinfo 在代码中的任何位置填写

// 服务器应该允许来自任何 IP 地址的连接

  serv_info.sin_addr.s_addr = INADDR_ANY;

此外,您可能需要填写家庭和端口

// 填写服务器的地址族

  serv_addr.sin_family = AF_INET;

要了解更多详细信息,这是我在论坛 http://forum.codecall.net/topic/63924-a-simple-tcp-server-using-linux-c-api/上写的一个工作服务器

于 2012-05-11T07:27:58.157 回答