代码如下:
package myself_sample;
import java.io.*;
import java.net.*;/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */public class UDPClientSocket extends Thread
{
    private int listenerPort = 59;
    private DatagramSocket listenerSocket = null;
    private final int MAX_PACKET_SIZE = 1000;    public UDPClientSocket()
    {
        super();
    }    public UDPClientSocket(int port)
    {
        listenerPort = port;
    }    public void run()
    {
        byte[] msg = new byte[MAX_PACKET_SIZE];
        DatagramPacket infoPacket = new DatagramPacket(msg,MAX_PACKET_SIZE);
        try
        {
            listenerSocket = new DatagramSocket();
            String strAddrinfo = new String("member");            DatagramPacket clientInfo = new DatagramPacket(strAddrinfo.getBytes(),
                                                             strAddrinfo.length(),
                                            InetAddress.getByName"192.168.0.161"),
                                                           59
                                                           );            listenerSocket.send(clientInfo);
*********************************************************************************
            //listenerSocket = new DatagramSocket(listenerPort);
*********************************************************************************        }
        catch(SocketException ex)
        {
            System.out.println("SocketException,System will exit -1");
            System.exit(-1);
        }
        catch(IOException ex)
        {
            System.out.println("IOException,System will exit -1");
            System.exit(-1);
        }        while(true)
        {
            try
            {
                listenerSocket.setSoTimeout(0);
————————————————————————————————————————
                listenerSocket.receive(infoPacket);
————————————————————————————————————————
                System.out.print("Server(" + infoPacket.getAddress().toString() + "):");
                System.out.println(new String(infoPacket.getData()));
            }
            catch(IOException ex)
            {
                ex.printStackTrace();
            }
        }
    }    public static void main(String[] args)
    {
        UDPClientSocket ucs = null;
        if (args.length > 1)
        {
            System.out.println("Usage: java myself_sample.UDPClientSocket <PORT>");
            System.exit(0);
        }        if (args.length == 1)
        {
            int i_port = 0;
            try
            {
                i_port = Integer.parseInt(args[0]);
            }
            catch(NumberFormatException ex)
            {
                System.out.println("Invalid port");
                System.exit(-1);
            }
            ucs = new UDPClientSocket(i_port);
        }        if (args.length == 0)
            ucs = new UDPClientSocket();        ucs.start();
    }
}程序走到--之间的语句就出现了SocketException:Socket Closed的错误,如果将*之间的注释去掉就没问题了,我觉得也不会是send()完就自动close掉了,那这条错误应该怎么解决?

解决方案 »

  1.   

    不会自动关闭,必须显式调用close方法
    你的代码有错误:
    因为你初始化listenerSocket 的时候是这样写的listenerSocket = new DatagramSocket();
    没有写端口号应该写成listenerSocket = new DatagramSocket(listenerPort);不然就什么也
    receive不到
    还有,没必要加个循环,,,还有,setSoTimeout最好不要设为0
    DatagramPacket clientInfo = new DatagramPacket(strAddrinfo.getBytes(),
                                                                 strAddrinfo.length(),
                                                InetAddress.getByName"192.168.0.161"),
                                                               59
                                                               );
    这句不队,是不是贴的时候疏忽了,InetAddress.getByName后面丢了括号