В чем разница между Ubuntu Server (32-разрядная версия) и Desktop (32-разрядная версия) в Socket-программировании - PullRequest
1 голос
/ 28 июля 2011

Я работаю над проектом на основе сервера / клиента.Я почти закончил свой код на стороне сервера.

Я разрабатываю серверное приложение в EclipseCDT на Ubuntu Desktop, и все просто отлично работает.

Но при развертывании моего приложения на сервере Ubuntu (я пробовал сервер10.04 / 10.10), серверное приложение может нормально запускаться (в ожидании соединения), но тот же клиент просто не может подключиться к серверу.

Я использую Socket для получения и отправки данных клиенту или из него.

Питер

PS: если я установлю 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, но если приходит новое соединение, сервер не возобновит работу на LabelResume, и новое соединение с сокетом НЕ МОЖЕТ быть создано.

Можете ли вы, ребятавыручить меня?

Питер

1 Ответ

1 голос
/ 03 августа 2011

Спасибо за ваше внимание.

Я наконец-то понял это.

Если для одного имени хоста (/etc/hosts) более одного IP-адреса, старый код завершится ошибкой.

Пример /etc/hosts file:

127.0.0.1 localhost YourHostName
10.50.10.251 YourHostName

Я отследил стек вызовов и обнаружил, что IP-адрес (10.50.10.251), переданный программе, преобразуется в имя хоста, изатем имя хоста преобразуется обратно в IP-адрес (для привязки), но РАЗНЫЙ, поэтому моя серверная программа не может принять какое-либо клиентское соединение.

Надеюсь, это поможет, если у других возникнут аналогичные проблемы.

Питер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...