import java.io.*;
import java.net.*;

public class Server{

    public static void main(String[] args) throws SocketException, IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int myPort= 2002;
        String name;
        String serverMsg;
        String clientMsg;
        byte[] dataReceive = new byte[65536];
        byte[] sendData = new byte[65536];

        DatagramPacket packetReceive = new DatagramPacket(dataReceive,dataReceive.length);
        DatagramPacket sendPacket= new DatagramPacket(sendData,sendData.length);
        DatagramSocket server= new DatagramSocket(myPort);
        serverMsg="Pls enter your name:";
        sendData=serverMsg.getBytes();
        sendPacket.setData(sendData);
        sendPacket.setAddress(packetReceive.getAddress());
        sendPacket.setPort(packetReceive.getPort());
        server.send(sendPacket);
        server.receive(packetReceive);
        clientMsg = new String(packetReceive.getData(),0,packetReceive.getLength());
        serverMsg="yourname is "+clientMsg;
        sendData=serverMsg.getBytes();
        sendPacket.setData(sendData);
        sendPacket.setAddress(packetReceive.getAddress());
        sendPacket.setPort(packetReceive.getPort());
        server.send(sendPacket);

        server.close();
    }
}




一般输出

Exception in thread "main" java.lang.IllegalArgumentException: Port out of range:-1
    at java.net.DatagramPacket.setPort(DatagramPacket.java:292)
    at Server.main(Server.java:25)

最佳答案

sendPacket.setAddress(packetReceive.getAddress());


我不确定您认为这行代码会做什么,但是没有任何意义。尽管其名称为“ packetReceive”,但尚未保存已接收的数据包。因此,“ getAddress”无法返回其发送地址。

10-07 19:34
查看更多