簡體   English   中英

多線程服務器和客戶端Java指定客戶端線程

[英]Multi threaded server and client Java specify the client thread

我使用多線程創建了一個 UDP 服務器客戶端架構,問題是當我從服務器向客戶端發送另一個客戶端線程時,另一個客戶端線程會獲取數據包等等。 ?

 Client

 public UDPClient(int port) throws SocketException
{
    this.socket = new DatagramSocket();
    this.arg1 = (int) (Math.random() * 1000) ;
    this.arg2 = (int) (Math.random() * 1000) ;
    this.port = port ;
}
    public void run()
{
    try{
        String x = arg1 + " + " + arg2;
        BUFFER = x.getBytes();
        InetAddress ip = InetAddress.getByName("127.0.0.1");
        packet = new DatagramPacket(BUFFER , BUFFER.length,ip,port);
        printOutput(new String("Client send" + x));
        socket.send(packet);
        socket.receive(packet);
        String output = new String(packet.getData(),0,packet.getLength());
        printOutput(new String("receive " + x + "=" + output));
    }
    catch(IOException e)
    {
        System.out.println("UDP sending problem " + e.getMessage());
    }
}

服務器

public void run()
{
    while(true)
    {
        try{
            packet = new DatagramPacket(BUFFER,BUFFER.length);
            socket.receive(packet);
            executor.execute(new UDPServerCore(socket,packet,BUFFER));
        }
        catch(IOException e)
        {
            System.out.println("UDP receiving packet problem "
            + e.getMessage());
        }
    }
}

服務器核心

@Override
public void run(){
    String x = new String(packet.getData(),0,packet.getLength());
    String y = parseString(x);
    BUFFER = y.getBytes();
    //packet.setData(y.getBytes());
    DatagramPacket res = new DatagramPacket(BUFFER , BUFFER.length 
    ,packet.getAddress(),packet.getPort());
    try{
    socket.send(res);
    }
    catch(IOException e)
    {
        System.out.println("Something went wrong " + e.getMessage());
    }
}

synchronized private static String parseString(String x )
{
    String arr[] = x.split(" ");
    int z = Integer.parseInt(arr[0]);
    int y = Integer.parseInt(arr[2]);
    y = y + z;
    writeServer.append(x+ "=" + y +"\n");
    return String.valueOf(y);
}

我解決了它,因為問題是當我創建線程的端口時,我應該首先創建具有指定端口的所有客戶端線程,然后啟動每個線程。

你可以嘗試分配一個ID,包跟蹤當前會話它̶屬於。 UDP 與 TCP 相對,是一種無確認且無連接的協議。 UDP 不支持數據“流”,因此您必須找到一種方法將每個數據包分派到相應的“會話處理程序”。

如果你能解釋更多你想要完成的事情,我認為這里的任何人都可以幫助你更多。

編輯:每個 udp 數據包都包含源地址和端口。 您可以使用它們來識別和存儲連接的每個客戶端的數據。 提示:您可以使用地圖/字典,並在接收數據包時使用客戶端地址和端口作為鍵檢索您的會話對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM