2011-07-28 19 views
1

プログラミングソケットでのUbuntuサーバー(32ビット)およびデスクトップ(32ビット)の違いは何。私はほとんどサーバーのサイドコードを終えました。私は、サーバ/クライアントベースのプロジェクトに取り組んでいます

私はUbuntuのデスクトップ上EclipseCDTでサーバーアプリケーションを開発し、すべてがうまく動作します。

しかし私のアプリをUbuntu Serverに配備すると(サーバー10.04/10.10を試しました)、サーバーアプリケーションは正常に(接続待ち)起動できますが、同じクライアントはサーバーに接続できません。

私はクライアントから/にデータを受信し、送信するためのソケットを使用します。

ピーター

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の間では:

サーバが起動すると、ソケットルーチン::acceptLabelStartBlockingでブロックされます。新しい接続が到着した場合、サーバはLabelResumeで再開し、戻り値newSocketIdを使用して新しいソケット接続を作成します。

しかし、Ubuntuのサーバーのバージョンに、サーバーの起動時に、それはまた::acceptルーチンソケットとLabelStartBlockingでブロックされていますが、新しい接続が到着した場合、サーバはLabelResumeで再開されませんし、新しいソケット接続ができません作成される。

あなたは私を助けてくれますか?

Peter

+2

クライアントプログラムとサーバープログラムは、同じボックスにあるときに適切に通信しますか?クリアする必要がありますか?どのようにプログラムはネットワークアドレスを指定しますか?クライアントとサーバーが座っているネットワークはどのように見えますか?これらをあなたの質問とソースコードに入れて、合理的な回答を得るかもしれません。この問題は、Ubuntuサーバーとクライアントの違いとは関係ありません。 – antlersoft

+0

ソケット接続コードは別のチームのものであり、ドキュメントはありません。同じボックス上でサーバーとクライアントでも通信できません。私の個人的な意見では、それはいくつかのサーバー/デスクトップ構成の違いかもしれない、同じアプリのため、それはデスクトップで動作しますが、サーバー版では動作しません。 –

+0

こんにちはantlersoft、私はソースコードで何かを見つけました。それをチェックアウトするのを手伝ってもらえますか?私はポストに新しい発見を加えました。 –

答えて

1

ご協力いただきありがとうございます。

私はついにそれを理解しました。

同じホスト名(/etc/hosts)のために複数のIPアドレスがある場合は、古いコードは失敗します。

/etc/hostsファイル:

127.0.0.1 localhost YourHostName 
10.50.10.251 YourHostName 

は私が呼び出しスタックをトレースして、私はIPアドレス(10.50.10.251)がプログラムに渡されたホスト名に変換され、その後ホスト名が翻訳され、ことがわかりましたIPアドレス(バインディング用)に戻っていますが、別のものは私のサーバープログラムがクライアント接続を受け付けない理由です。

他の人にも同様の問題がある場合に役立ちます。

Peter

関連する問題