udp端口失败,服务器无法启动

时间:2011-12-13 00:33:02

标签: java

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)

1 个答案:

答案 0 :(得分:3)

sendPacket.setAddress(packetReceive.getAddress());

我不确定你认为这行代码会做什么,但它没有任何意义。尽管它的名字," packetReceive" (尚未)保持收到的数据包。所以" getAddress"无法返回发送的地址。