2016-05-07 5 views
0

JavaプログラムをC#と通信しようとしていますが、動作していません。JavaとC#間のUDP通信

コードは本当に基本的なもの、ここにある:

これは

static InetAddress ip; 
static int port = 10000; 

public static void main(String args[]) { 
    try { 
     ip = InetAddress.getByName("127.0.0.1"); 
     DatagramSocket socket = new DatagramSocket(port, ip); 
     byte[] sendData = new byte[1024]; 
     sendData = "Hola".getBytes(); 
     DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ip, port); 
     socket.send(sendPacket); 
     socket.close(); 
    } catch (Exception e) { 
    } 
} 

Javaクライアントであり、ここでそれがC#のサーバがユニティであるC#のサーバ

static UdpClient client; 
static IPEndPoint sender; 
void Start() { 
    byte[] data = new byte[1024]; 
    string ip = "127.0.0.1"; 
    int port = 10000; 
    client = new UdpClient(ip, port);  
    sender = new IPEndPoint(IPAddress.Parse(ip), port); 

    client.BeginReceive (new AsyncCallback(recibir), sender); 

} 

static void recibir(IAsyncResult res){ 
    byte[] bResp = client.EndReceive(res, ref sender); 

    //Convert the data to a string 
    string mes = Encoding.UTF8.GetString(bResp); 

    //Display the string 
    Debug.Log(mes); 
} 

ですファイル、私はUnityからそれを実行するので、Startは最初に呼び出されるメソッドです。

コンピュータのポート10000(またはその他のもの)を介して通信することをお勧めします.JavaのメインとC#の起動は実行されているようですが、コールバックは呼び出されません。

なぜ機能していないのでしょうか?皆さん、ありがとうございました。

+0

私はBlocking Receiveをc#で使用しようとしましたが、メッセージは受信されませんでした。だから問題は接続にあるかもしれないが、私はそれを見つけることができない。 – JOSEMAFUEN

答えて

0

私はそれを解決しました。Javaクライアントでは、新しいDatagramSocket()を引数なしで呼び出す必要があり、c#サーバでは新しいUdpClient(port)を呼び出す必要があります。ポートでのみ呼び出される必要があります。

0

BeginReceive()は非ブロッキングです。あなたのプログラムは何かを受け取る前に終了します。 Receive()を使用するか、サーバーコードの最後にbusy-waiting-loopを入れてください。

+0

私はwhile(true){}を使ってみましたが、Unityはブロックされます。私はStartメソッドが決して終わらないと思う。 – JOSEMAFUEN

関連する問題