Реализация клиент-сервера в Windows Phone 7

Я пытаюсь создать приложение для Windows Phone 7, которое действует как клиент и которое отправляет запросы на сервер, который написан на Java. Клиент должен отправить запрос и дождаться ответа от сервера. Моя проблема в том, что я не могу нормально общаться с сервером. Когда я пытался протестировать его в простой программе.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 начинает свою работу немедленно, когда он обнаруживает соединение, поэтому это может также вызвать проблему? Что я могу сделать, чтобы коммуникация работала?

0 ответов

Другие вопросы по тегам