我正在开发基于服务器/客户端的项目。我几乎完成了服务器端代码。
我在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}},并且无法创建新的套接字连接。
你们可以帮助我吗?
彼得
答案 0 :(得分:1)
感谢您的关注。
我终于明白了。
如果同一主机名(/etc/hosts
)有多个IP地址,则旧代码将失败。
示例/etc/hosts
文件:
127.0.0.1 localhost YourHostName
10.50.10.251 YourHostName
我跟踪调用堆栈,我发现,传递给程序的IP地址(10.50.10.251)被转换为主机名,然后主机名被转换回IP地址(用于绑定),但是不同的一,这就是我的服务器程序无法接受任何客户端连接的原因。
希望如果其他人有类似的问题会有所帮助。
彼得