クライアントとして機能し、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サーバーは接続を検出するとすぐに動作を開始するため、問題が発生する可能性がありますか? コミュニケーションを機能させるにはどうすればよいですか?