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”无法返回其发送地址。