当前位置:   article > 正文

udp server java_Java基于UDP实现服务器和多客户端之间的通信

java udp server

UDPServer.java

package com.zh.socket;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

/*

* 服务器端,基于UDP的用户登录

*/

public class UDPServer {

public static void main(String[] args) throws IOException{

/*

* 服务器端接受客户端的数据

*/

DatagramSocket socket = new DatagramSocket(6666);

System.out.println("***服务器端即将启动,等待客户端连接***");

while(true){

UDPServerThread st = new UDPServerThread(socket);

st.start();

}

}

}

UDPClient.java

package com.zh.socket;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

/*

* 客户端

*/

public class UDPClient {

public static void main(String[] args) throws IOException {

/*

* 向服务器端发送请求

*/

//1.定义服务器的地址,端口号,数据

InetAddress address = InetAddress.getByName("localhost");

int port = 6666;

byte[] data = "用户名:zh;密码:456".getBytes();

//2.创建数据报,包含发送的数据信息

DatagramPacket packet = new DatagramPacket(data,data.length,address,port);

//3.创建DatagramSocket用于数据的传输

DatagramSocket socket = new DatagramSocket();

//4.向服务器端发送数据报

socket.send(packet);

/*

* 接收服务器端响应的数据

*/

//1.创建数据报,用于接收服务器端的信息

byte[] data2 = new byte[1024];

DatagramPacket packet2 = new DatagramPacket(data2,data.length);

//2.接收服务器端的信息

socket.receive(packet2);//在接收到响应之前,此方法会一直处于阻塞状态

//3.读取信息

String reply = new String(data2,0,packet.getLength());

//4.输出信息

System.out.println("我是客户端,服务器端说:"+reply);

//5.关闭资源

socket.close();

}

}

UDPServerThread.java

package com.zh.socket;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

/*

* 服务器线程处理类

*/

public class UDPServerThread extends Thread {

/*

* 线程执行的操作,响应客户端的请求

*/

DatagramSocket socket = null;

public UDPServerThread(DatagramSocket socket){

this.socket = socket;

}

public void run(){

/*

* 服务器端接受客户端的数据

*/

byte[] data = new byte[1024];//指定用于接受数据报的大小

DatagramPacket packet = new DatagramPacket(data,data.length);

try {

socket.receive(packet);//接受到数据之前该方法处于阻塞状态

String info = new String(data,0,packet.getLength());

System.out.println("我是服务器,客户端说:"+info);

/*

* 服务器端向客户端进行响应

*/

//1.定义客户端的地址,端口号,数据

InetAddress address = packet.getAddress();

int port = packet.getPort();

byte[] data2 = "欢迎您!".getBytes();

//2.创建数据报,包含相应信息

DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port);

//3.响应客户端

socket.send(packet2);

//注意这里不能关闭socket,因为在UDPServer类的while是死循环,无法重新创建socket,所以这里不能关闭socket,否则无法进行下一个客户端的监听

} catch (IOException e) {

e.printStackTrace();

}

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/146675?site
推荐阅读
相关标签
  

闽ICP备14008679号