0

クライアントとして機能し、Java で記述されたサーバーに要求を送信する Windows Phone 7 用のアプリケーションを作成しようとしています。クライアントはリクエストを送信し、サーバーからの応答を待つ必要がありました。私の問題は、サーバーと適切に通信できないように見えることです。シンプルな .NET C# プログラムでテストして、socket.send() や socket.receive() などのブロッキング呼び出しを使用すると、動作しますが、Windows Phone アプリケーションにはブロッキング呼び出しがありません。サーバー (Java) が接続を検出すると、次のようになります。

BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "UTF-8"));
String message = reader.readLine();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8"));
writer.println("hiBack");
writer.close();

これがクライアント(C#)の実装方法です。

public void sendRequest()
{
   socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   var connectionOperation = new SocketAsyncEventArgs { RemoteEndPoint = new DnsEndPoint(server, serverPort) };
   connectionOperation.Completed += new EventHandler<SocketAsyncEventArgs>(onConnectCompleted);
   socket.ConnectAsync(connectionOperation);
 }

 private void onConnectCompleted(object sender, SocketAsyncEventArgs e)
 {
    if (e.SocketError != SocketError.Success)
    {
       System.Console.WriteLine("Error! " + e.SocketError);
       return;
     }
     var sendListener = new SocketAsyncEventArgs();
     string msg = "hi";
     var buffer = new System.Text.UTF8Encoding().GetBytes(msg + Environment.NewLine);
     sendListener.SetBuffer(buffer, 0, buffer.Length);
     sendListener = new SocketAsyncEventArgs { RemoteEndPoint = new DnsEndPoint(server, serverPort) };
     sendListener.Completed += new EventHandler<SocketAsyncEventArgs>(onSendCompleted);
     socket.SendToAsync(sendListener);
 }

 private void onSendCompleted(object sender, SocketAsyncEventArgs e)
 {
      socket.ReceiveAsync(e);
 }

次の行に問題があります: socket.SendToAsync(sendListener); 何もせずにプログラムを終了する C# 側 (リターン コード 0 で終了)。Javaサーバーは接続を検出するとすぐに動作を開始するため、問題が発生する可能性がありますか? コミュニケーションを機能させるにはどうすればよいですか?

4

0 に答える 0