2016-05-07 1 views
0

Я пытаюсь передать программу Java с C#, но она не работает.UDP-связь между Java и C#

код действительно основной, здесь:

Это клиент Java

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) { 
    } 
} 

А вот это 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); 
} 

C# сервер является Unity файл, я имею в виду, я выполняю его из Unity, поэтому Start - это первый вызванный метод.

Я хотел бы, чтобы они связывались через порт 10000 (или любой другой) на моем компьютере, начало java и начало C# кажутся выполненными, но обратный вызов никогда не вызывается.

Любые идеи о том, почему он не работает? Спасибо вам всем.

+0

Я также попытался использовать блокировку Receive in C#, но сообщение так и не было получено. Так что проблема может быть в связи, но я не могу ее найти. – JOSEMAFUEN

ответ

0

Я решил, что в Java-клиенте новый DatagramSocket() должен быть вызван без каких-либо аргументов, а на сервере C# new UdpClient (port); должен быть вызван только с портом.

0

BeginReceive() не является блокирующим. Ваша программа завершается, прежде чем она сможет что-либо получить. Используйте либо Receive(), либо положите цикл ожидания ожидания в конце кода сервера.

+0

Я пытался использовать некоторое время (правда) {}, но затем Unity блокируется. Я думаю, это потому, что метод Start никогда не заканчивается. – JOSEMAFUEN