我运行了一下你的程序
问题一:编译是没问题 但是运行时出现异常了 java.net.SocketException: Socket closed
因为你的接收端用的是while(true),虽然没错,但是你把ds.close(); 写进去了,当你先运行接收端的时候 Socket 已经关闭了,你可以写个Thread来控制下。。
另外最重要的问题就是:
你应该吧这句话 byte[] buf=new byte[1024];改成buf = line.getBytes(),否则你这句话while((line=br.readLine())!=null)读出来的line是没用的,然后你发过去的也是空的。最简单的修改,代码如下:[code=java]//接收端
class L1 {
public static void main(String args[]) throws Exception {
while (true) {
DatagramSocket ds = new DatagramSocket(20006);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(text);
ds.close();
}
}
}[/code][code=java]//发送端
class L {
public static void main(String args[]) throws Exception {
DatagramSocket ds = new DatagramSocket();
System.out.println("输入: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = br.readLine()) != null) {
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getLocalHost(), 20006);
System.out.println(new String(dp.getData(), 0, dp.getLength()));
ds.send(dp);
}
ds.close();
}
}[/code]
[ 本帖最后由 杨相国 于 2011-09-11 21:26 编辑 ] |