Java和C#之间的UDP通信

时间:2016-05-07 15:35:16

标签: java c# udp communication unityscript

我正在尝试使用C#来传达Java程序,但它无法正常工作。

代码非常基本,这里是:

这是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的main和c#的start似乎已被执行,但回调从未被调用。

为什么它不起作用的任何想法?谢谢大家。

2 个答案:

答案 0 :(得分:0)

BeginReceive()是非阻止的。您的程序在收到任何内容之前终止。使用Receive()或在服务器代码的末尾放置一个忙等待循环。

答案 1 :(得分:0)

我已经解决了它,在Java客户端中,新的DatagramSocket()必须在没有任何参数的情况下被调用,而在c#server中新的UdpClient(端口);必须只用端口调用。