代码如下:
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掉了,那这条错误应该怎么解决?
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掉了,那这条错误应该怎么解决?
解决方案 »
- 【新手求解!】接口和抽象类有什么作用?
- 简单JAVA绘图实现不了的问题
- Serializable的隐患
- Vector中的copyInto方法应该怎么用。我想把vector对象中的内容输出到数组
- 请高手们帮帮忙,"玩"一个大家来找茬的游戏!急!谢谢了!
- 一个简单的问题-(j & 0xff) << 24 | i & 0xffffff 中的“0xff”和“0xffffff”起什么作用?
- 请大家帮我改改这两处程序!
- SOCKET的几个问题
- ◆◆◆请问,我用jb的界面,菜单的下拉总被textField和label挡住,咋办啊?◆◆◆
- public class a extends b{}--Calling protected Nember function error!!
- 一个例程,看不懂,向大家请教!(Think in java)
- 使用正则表达式查找Java文件的注释行的放分贴
你的代码有错误:
因为你初始化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后面丢了括号