在套接字编程中Ubuntu Server(32位)和桌面(32位)之间有什么区别

时间:2011-07-28 00:32:28

标签: sockets ubuntu connection desktop

我正在开发基于服务器/客户端的项目。我几乎完成了服务器端代码。

我在Ubuntu桌面上的EclipseCDT中开发服务器应用程序,一切正常。

但是当我的应用程序部署到Ubuntu服务器(我尝试过Server 10.04 / 10.10)时,服务器应用程序可以正常启动(等待连接),但同一个客户端无法连接到服务器。

我使用Socket接收和发送数据到客户端。

彼得

P.S。:如果我在我的服务器上安装sudo apt-get install ubuntu-desktop,那么一切正常。

=============================================== ============================

源代码中的新发现:

LabelStartBlocking:
int newScoketId = ::accept(socketId, 0, 0); // socketId == 3 ::accept is define in socket.h
                          // waiting for connection
LabelResume: // if new connection coming
// Do something with newSocketId

Ubuntu Desktop和Server之间的行为差​​异是:

在Ubuntu Desktop版本上,当服务器启动时,它会在LabelStartBlocking被套接字例程::accept阻止;然后,如果新连接到达,服务器将在LabelResume恢复并使用返回值newSocketId创建新的套接字连接;

但是,在Ubuntu Server版本上,当服务器启动时,它也会在LabelStartBlocking处被套接字例程::accept阻止,但是如果新连接到达,则服务器将不会在{ {1}},并且无法创建新的套接字连接。

你们可以帮助我吗?

彼得

1 个答案:

答案 0 :(得分:1)

感谢您的关注。

我终于明白了。

如果同一主机名(/etc/hosts)有多个IP地址,则旧代码将失败。

示例/etc/hosts文件:

127.0.0.1 localhost YourHostName
10.50.10.251 YourHostName

我跟踪调用堆栈,我发现,传递给程序的IP地址(10.50.10.251)被转换为主机名,然后主机名被转换回IP地址(用于绑定),但是不同的一,这就是我的服务器程序无法接受任何客户端连接的原因。

希望如果其他人有类似的问题会有所帮助。

彼得