通过Socket实现UDP(用户数据报)编程
2015-09-14 15:16
369 查看
服务器端
(1)步骤
①创建DatagramSocket,指定端口号
②创建DatagramPacket
③接收客户端发送的数据信息
④读取数据
2.客户端
(1)步骤
①定义发送信息
②创建DatagramPacket,包含将要发送的信息
③创建DatagramSocket
④发送数据
3.多客户端
①服务器端
②客户端
③线程监听
(1)步骤
①创建DatagramSocket,指定端口号
②创建DatagramPacket
③接收客户端发送的数据信息
④读取数据
try { /** * 服务器接收客户端数据 */ //1.创建服务器端DatagramSocket,指定端口 DatagramSocket socket=new DatagramSocket(1028); //2.创建数据报,用于接收客户端发送的数据 byte[] data=new byte[1024];//创建字节数组,指定接收的数据包的大小 DatagramPacket packet=new DatagramPacket(data, data.length); System.out.println("***服务器端已启动,等待客户端***"); //3.接收客户端发送的数据 socket.receive(packet);//此方法在接收到数据报之前会一直阻塞 //4.读取数据 String info=new String(data); System.out.println("我是服务器,客户端说:"+info); /** * 服务器对客户端数据进行响应 */ //1.定义客户端的IP,端口号,数据 InetAddress address = packet.getAddress(); int port=packet.getPort(); byte[] data2="欢迎您".getBytes(); //2.创建数据报,包含响应的数据信息 DatagramPacket packet2=new DatagramPacket(data2, 0,data2.length, address, port); //3.响应客户端 socket.send(packet2); //4.关闭资源 socket.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
2.客户端
(1)步骤
①定义发送信息
②创建DatagramPacket,包含将要发送的信息
③创建DatagramSocket
④发送数据
try { /** * 客户端向服务器发送数据 */ //1.定义服务器的地址,端口号,数据 InetAddress address = InetAddress.getByName("localhost"); int port=1028; //2.创建数据报,包含要发送的数据信息 String info="用户名:admin,密码:123456"; byte[] bytes=info.getBytes(); DatagramPacket packet=new DatagramPacket(bytes, 0, bytes.length, address, port); //3.创建DatagramSocket对象 DatagramSocket socket=new DatagramSocket(); //4.向服务器端发送数据报 socket.send(packet); /** * 客户端接收服务器响应的数据 */ //1.创建数据报,用于接收服务器端响应的数据 byte[] data2=new byte[1024]; DatagramPacket packet2=new DatagramPacket(data2, data2.length); //2.接收服务器响应的数据 socket.receive(packet2); //3.读取数据 System.out.println("我是客户端,服务器说:"+new String(data2)); //4.关闭资源 socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
3.多客户端
①服务器端
void UDPServer(){ try { /** * 服务器接收客户端数据 */ //1.创建服务器端DatagramSocket,指定端口 DatagramSocket socket=new DatagramSocket(1028); System.out.println("***服务器端已启动,等待客户端***"); while(true){ //2.创建数据包,用于接收客户端发送的数据 byte[] data=new byte[1024];//创建字节数组,指定接收的数据包的大小 DatagramPacket packet=new DatagramPacket(data, data.length); //3.接收客户端发送的数据 socket.receive(packet); UDPServerThread serverThread=new UDPServerThread(socket,packet); serverThread.start(); } }catch (Exception e) { e.printStackTrace(); } }
②客户端
void UDPClient(){ try { /** * 客户端向服务器发送数据 */ //1.定义服务器的地址,端口号,数据 InetAddress address = InetAddress.getByName("localhost"); int port=1028; //2.创建数据报,包含要发送的数据信息 String info="用户名:admin,密码:123456"; byte[] bytes=info.getBytes(); DatagramPacket packet=new DatagramPacket(bytes, 0, bytes.length, address, port); //3.创建DatagramSocket对象 DatagramSocket socket=new DatagramSocket(); //4.向服务器端发送数据报 socket.send(packet); /** * 客户端接收服务器响应的数据 */ //1.创建数据报,用于接收服务器端响应的数据 byte[] data2=new byte[1024]; DatagramPacket packet2=new DatagramPacket(data2, data2.length); //2.接收服务器响应的数据 socket.receive(packet2); //3.读取数据 System.out.println("我是客户端,服务器说:"+new String(data2)); //4.关闭资源 socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
③线程监听
public class UDPServerThread extends Thread{ DatagramSocket socket; DatagramPacket packet; public UDPServerThread(DatagramSocket socket,DatagramPacket packet) { this.socket=socket; this.packet=packet; } @Override public void run() { try { byte[] data=packet.getData(); //4.读取数据 String info=new String(data); System.out.println("我是服务器,客户端说:"+info); /** * 服务器对客户端数据进行响应 */ //1.定义客户端的IP,端口号,数据 InetAddress address = packet.getAddress(); int port=packet.getPort(); byte[] data2="欢迎您".getBytes(); //2.创建数据报,包含响应的数据信息 DatagramPacket packet2=new DatagramPacket(data2, 0,data2.length, address, port); //3.响应客户端 socket.send(packet2); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- java socket 注意的地方
- java socket 注意的地方
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#基于UDP进行异步通信的方法
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- php与flash as3 socket通信传送文件实现代码
- 解决time_wait强制关闭socket
- C#中使用UDP通信实例
- C#使用Socket上传并保存图片的方法
- 深入php socket的讲解与实例分析
- Linux网络编程之UDP Socket程序示例
- Linux网络编程之socket文件传输示例