EdSheeran
2016-12-30 10:26
public class UDPRunnable extends Thread{
DatagramPacket packet;;
//初始化DatagramPacket, DatagramSocket
public UDPRunnable(DatagramPacket packet){
this.packet=packet;
}
public void run() {
byte[] data=packet.getData();//!!!这里应该使用packet的getData方法来创建data字节,不然data字节中为空值
String info=new String(data,0,packet.getLength());//
System.out.println("我是服务器,客户端说:"+info);
/*
* 服务器向客户端发送响应信息
*/
//需要知道客户端的address,port,并且创建需要发送的消息
InetAddress address=packet.getAddress();
int port=packet.getPort();
byte[] data2="客户端登陆成功,欢迎使用服务器".getBytes();
//创建DatagramPacket
DatagramPacket packet2=new DatagramPacket(data2,data2.length,address,port);
try {
DatagramSocket socket=new DatagramSocket();
socket.send(packet2);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class UDPClient {
public static void main(String[] args) throws IOException {
/*
* 向服务器端发送消息
*/
//1.需要获取服务器端的地址,端口号
InetAddress address=InetAddress.getByName("localhost");
int port=6605;
byte[] message="用户名:admin 密码:123".getBytes();
//创建数据报
DatagramPacket packet=new DatagramPacket(message,message.length,address,port);
//创建DatagramSocket
DatagramSocket socket=new DatagramSocket();
socket.send(packet);
/*
* 接收服务器端发送的响应消息
*/
//创建DatagramPacket
byte[] data=new byte[10*1024];
DatagramPacket packet2=new DatagramPacket(data,data.length);
socket.receive(packet2);
String reply=new String(data,0,packet.getLength());
System.out.println("我是客户端,服务器说:"+reply);
}
}
客户端输出结果: 客户端启动成功,欢迎使
继承了Thread类,run()方法没有运行。看你是想实现runnable接口,但是却继承了Thread类。只有实现了Runnable接口,run()方法才能自动运行。还有,第二行有两个分号。
服务器端程序(UDPRunnable)没有入口(没有main方法。)
DatagramSocket socket=new DatagramSocket();未指定端口号。
服务器端程序(UDPRunnable)步骤有误。县先创建DatagramSocket实例,指定端口,在创建DatagramPacket数据包,在用socket实例接收数据。玩了用String的构造方法读取数据。客户端代码没有问题。
其他的没有看出来。共同学习,嘻嘻~
Java Socket应用---通信是这样练成的
125012 学习 · 590 问题
相似问题