黑马程序员技术交流社区
标题:
java 中UDP网络编程问题
[打印本页]
作者:
张超超
时间:
2012-4-17 09:57
标题:
java 中UDP网络编程问题
//服务器
package class3.apr10.danjiaxin;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/**
* @author danjiaxin
*
*/
public class UDPA {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
System.out.println("服务器启动");
DatagramSocket ds = new DatagramSocket(1234);
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getLocalHost(), 1234);
ds.receive(dp);
by = dp.getData();
String str = new String(by).trim();
System.out.println("服务器接受信息是:"+str);
}
}
/客户端
package class3.apr10.danjiaxin;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/**
* @author danjiaxin
*
*/
public class UDPB {
public static void main(String[] args) throws Exception {
System.out.println("客户端启动");
DatagramSocket ds = new DatagramSocket();
Scanner input = new Scanner(System.in);
System.out.println("请输入客户信息");
String str = input.nextLine();
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getLocalHost(), 1234);
ds.send(dp);
}
}
报错:Exception in thread "main" java.net.SocketException: Socket closed
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
at class3.apr10.danjiaxin.UDPA.main(UDPA.java:25)
作者:
陈扬
时间:
2012-4-17 10:11
代码是没有问题的,你应该先启动服务器端,在启动客户端
作者:
周四川
时间:
2012-4-17 14:02
本帖最后由 周四川 于 2012-4-17 14:05 编辑
看了下代码,你的发送端和接收端(UDP貌似没有客户端和服务器之说)在实例化DatagramPacket对象时,都是用的
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getLocalHost(), 1234);
在接收端实例化DatagramPacket时,不需要指定ip地址和端口号,
DatagramPacket dp = new DatagramPacket(by, by.length);
即可。
作者:
张文建
时间:
2012-4-17 15:24
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getLocalHost(), 1234)和DatagramPacket dp = new DatagramPacket(by, by.length)
都行,代码没问题:如果你用的是eclipse的话就在同一个包里建两个java文件,一个是客户端,一个服务端,即可;如果你用的是editplus则分别运行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2