0

ハンドヘルドと PC 間の通信を確立しようとしています。

クライアント用に次のコードがあります。

    public void connect(string IPAddress, int port)
    {
                // Connect to a remote device.
        try
        {
           IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 1, 10 });
           IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
           // Create a TCP/IP socket.
           client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           // Connect to the remote endpoint.
           client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
           if (connectDone.WaitOne()){
                 //do something..
           }
           else{
                 MessageBox.Show("TIMEOUT on WaitOne");
           }
        }
        catch(Exception e){
                 MessageBox.Show(e.Message);
        }
      }

私の問題は、PC で両方を実行すると正常に通信することですが、SmartDevice プロジェクトの同じコードが PC で実行されているサーバーに接続せず、次のエラーが発生することです。

System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or stablished connection failed 
because connected host has failed to respond

私は何が欠けていますか?

注: IPAddress はコード内にハードコーディングされています


EDIT :これは、MSDNの例から取った別のコードです。これも機能しません。読み取ることができないと表示されます。この場合のサーバー コードは例と同じですが、クライアント コードには変更があります。

private void button1_Click(object sender, EventArgs e)
{
    // In this code example, use a hard-coded
    // IP address and message.
    string serverIP = "192.168.1.10";//HERE IS THE DIFERENCE
    string message = "Hello";
    Connect(serverIP, message);
}

助けてくれてありがとう!

4

1 に答える 1

1

「モバイル デバイス」クライアントの場合、これを使用して「PC」ホストにデータを送信します。

private void Send(string value) {
  byte[] data = Encoding.ASCII.GetBytes(value);
  try {
    using (TcpClient client = new TcpClient(txtIPAddress.Text, 8000)) {
      NetworkStream stream = client.GetStream();
      stream.Write(data, 0, data.Length);
    }
  } catch (Exception err) {
    // Log the error
  }
}

ホストの場合は、 TcpListenerオブジェクトを待機させられるスレッドまたはBackgroundWorkerを使用するのが最適です。

private void Worker_TcpListener(object sender, DoWorkEventArgs e) {
  BackgroundWorker worker = (BackgroundWorker)sender;
  do {
    string eMsg = null;
    int port = 8000;
    try {
      _listener = new TcpListener(IPAddress.Any, port);
      _listener.Start();
      TcpClient client = _listener.AcceptTcpClient(); // waits until data is avaiable
      int MAX = client.ReceiveBufferSize;
      NetworkStream stream = client.GetStream();
      Byte[] buffer = new Byte[MAX];
      int len = stream.Read(buffer, 0, MAX);
      if (0 < len) {
        string data = Encoding.UTF8.GetString(buffer);
        worker.ReportProgress(len, data.Substring(0, len));
      }
      stream.Close();
      client.Close();
    } catch (Exception err) {
      // Log your error
    }
    if (!String.IsNullOrEmpty(eMsg)) {
      worker.ReportProgress(0, eMsg);
    }
  } while (!worker.CancellationPending);
}
于 2012-07-25T17:42:49.460 に答える