0

Symbian デバイスの j2me midlet から Windows (C#) ソケット サーバーへの tcp ソケットを開こうとしています。サーバーは機能しており、数か月間テストされました。ミッドレットからソケットを開こうとすると

clientSocketConnection = (SocketConnection) Connector.open("socket://" + ip + ":" + port);

-34 エラー (接続できませんでした) でタイムアウトするだけです。

一方の側でサーバーが存在する同じマシンで「ServerSocket」を使用して(エミュレートされた)2台の電話間でこのようなソケット接続を開くことができるため、電話にネットワーク機能と権限があることを知っています。

どういうわけか、J2ME Socket は C# の対応するものと互換性がありません....

listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

この問題に関するヒントをいただければ幸いです。また、サーバー側で別のタイプのソケットを使用する必要がありますか? J2ME ソケットの AdressFamily、SocketType、ProtocolType に関する情報が見つかりませんでした。

最近のコメントによる情報を追加します。ファイアウォールがなく、マシンの IP に対して DMZ が構成されているため、ファイアウォールの問題ではありません。(エミュレートされた)電話はインターネットにアクセスでき、エミュレータから別のエミュレータへのソケットを開くと、両方とも同じマシン上で、「クライアント」側のWAN PUBLIC IPを使用して「サーバー」側を見つけます。

4

1 に答える 1

0

さて、それは今解決しました。本当に奇妙ですが、「localhost」で j2me リスニング ポート (ServerPort) をバインドすることは、「localhost」で .net リスニング ポートをバインドすることと同じではありません。つまり、ローカルホストでリッスンする「サーバー」ミッドレットを作成すると、クライアントは接続できましたが、.net サーバーでそれを実行すると、クライアントは接続できませんでした。「解決策」は、「localhost」を使用する代わりにコンピューターの IP をハードコアすることでした。理由は本当にわかりませんが、これはうまくいきました...

于 2011-09-04T19:55:08.507 に答える