簡體   English   中英

數據不會通過DatagramSocket發送

[英]Data wont send through DatagramSocket

由於某種原因,我的數據報套接字中的數據不會發送。 我試圖做一個簡單的chatclient。 這是我的聊天客戶端的工作方式:

  1. 該人輸入用戶名
  2. 他們輸入IP
  3. 它連接
  4. 他們發送信息

這是我的代碼:

客戶端1(發送和接收):

// Server Info
public static int serverPort = 8743;
public static String serverName = "ServerName";

// Functions for the server

@SuppressWarnings("resource")
public static void main(String args[]) throws Exception {
    DatagramSocket serverSocket = new DatagramSocket();
    byte[] receiveData = new byte[1024];
    System.out.println("You are now the host.");
    boolean enteredDetails = false;
    String username = null;
    String ipAddress = null;
    System.out.print("Enter your username: ");
    Scanner userInput = new Scanner(System.in);
    if (userInput.hasNext()) {
        username = userInput.next();
    }
    System.out.print("Enter the IP: ");
    if (userInput.hasNext()) {
        ipAddress = userInput.next();
        enteredDetails = true;
    }

    while (true) {
        Scanner message = new Scanner(System.in);
        if (message.hasNextLine()) {
            String messageFormat = username + ": " + message.nextLine();
            byte[] sendData = messageFormat.getBytes();
            InetAddress IPAddress = InetAddress.getByName(ipAddress);
            DatagramPacket sendPacket = new DatagramPacket(sendData,
                    sendData.length, InetAddress.getByName(ipAddress), 9876);
            serverSocket.send(sendPacket);
            System.out.println(messageFormat);
        }
        // Recieve text
        DatagramPacket receivePacket = new DatagramPacket(receiveData,
                receiveData.length);
        serverSocket.receive(receivePacket);
        String sentence = new String(receivePacket.getData());
        System.out.println(sentence);
    }
}

對於第二個客戶(僅收款人):

@SuppressWarnings("resource")
public static void main(String args[]) throws Exception {
    DatagramSocket serverSocket = new DatagramSocket();
    byte[] receiveData = new byte[1024];
    boolean enteredDetails = false;
    String username = null;
    String ipAddress = null;
    System.out.print("Enter your username: ");
    Scanner userInput = new Scanner(System.in);
    if (userInput.hasNext()) {
        username = userInput.next();
    }
    System.out.print("Enter the IP: ");
    if (userInput.hasNext()) {
        ipAddress = userInput.next();
        enteredDetails = true;
    }

    while (true) {
        // Recieve text
        DatagramPacket receivePacket = new DatagramPacket(receiveData,
                receiveData.length);
        serverSocket.receive(receivePacket);
        String sentence = new String(receivePacket.getData());
        System.out.println(sentence);
    }
}

客戶1:

DatagramPacket sendPacket = new DatagramPacket(sendData,
                sendData.length, InetAddress.getByName(ipAddress), 9876);

該客戶端正在發送到端口9876。

客戶2:

DatagramSocket serverSocket = new DatagramSocket();

該客戶端無法接收任何內容,因為它在每次運行時都不同的未知端口上接收。 它應該是:

DatagramSocket serverSocket = new DatagramSocket(9876);

暫無
暫無

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

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