2016-10-05 4 views
2

.NETアプリケーションからJavaアプリケーションにデータを送信する必要があるユースケースがあり、これをソケットを使用して実行しようとしています。私は、サーバーのC#を使用して作成している - 私は以下のエラーを取得していますJavaソケットクライアントC#ソケットサーバーに接続できません

Socket socket; 
    try { 
     socket = new Socket("localhost", 13); 
     System.out.println("Connection established"); 
     BufferedReader input = 
       new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     String answer = input.readLine(); 
     System.out.println(answer); 
     socket.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

- -

 TcpListener tcpListener = null; 
     IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0]; 

     try 
     { 
      // Set the listener on the local IP address 
      // and specify the port. 
      tcpListener = new TcpListener(ipAddress, 13); 
      tcpListener.Start(); 
      Console.WriteLine("The server is running at port 13..."); 
      Console.WriteLine("The local End point is -" + 
           tcpListener.LocalEndpoint); 
      output = "Waiting for a connection..."; 
      Console.WriteLine(output); 

      Socket s = tcpListener.AcceptSocket(); 
      Console.WriteLine("Connection accepted from " + s.RemoteEndPoint); 
     } 
     catch (Exception e) 
     { 
      output = "Error: " + e.ToString(); 
      Console.WriteLine(output); 
     } 
    } 

Java側では、私は同じホストとポートをlistenソケットを作成しているjava.net.ConnectException:接続が拒否されました:接続。私はtelnet localhost 13を使って、自分のサーバが本当に稼働しているかどうかを確認しました。だから私は両方がローカルに実行されているので、それはサーバーが実行されていないかファイアウォールで問題になる可能性はないと思う。どのようにこれを解決するための任意のアイデア?

+0

上位のポート番号(1000シリーズ)を使用してください。 – Sanjeev

+0

ワイルドカードアドレス(0.0.0.0)にバインドすることもできます。おそらく、localhostにIPv6バインディングもあり、C#サーバーはそれを聞くだけかもしれません。 – Nico

+0

IPアドレス127.0.0.1(ローカルホスト)を使用する場合、ネットライブラリのconnectメソッドは例外を出します。 connectメソッドを使用する場合は、PCのIPアドレスを使用する必要があります。リスナーはIPAddress.Anyを使用する必要があります。 Windowsオペレーティングシステムは、PC IPアドレスから仮想ソケットIPに自動的にメッセージを転送します。 – jdweng

答えて

3

私はあなたのコードを試しましたが、私は全く同じ問題を抱えていました。 C#TCP Serverは、IPv6インターフェイスにのみバインドされます(リソースモニタリスニングアドレスなど)。サーバーをnew TcpListener(IPAddress.Any, 13)に変更した場合は正常に動作します。

+0

それは動作します。しかし、IPV6の代わりにIPV4インターフェイスをバインドしたい場合、それを行うことはできますか? – Pratik

+0

'IPAddress ipAddress = Dns.GetHostEntry(" localhost ")であなたのIPアドレスをフィルタすることができます。AddressList.First(a => a.AddressFamily == AddressFamily.InterNetwork)' – Nico

+0

awesome!ありがとう:) – Pratik

関連する問題