JavaSE socket 基于UDP Server/Client的实现
来源:互联网 发布:小夕kitty淘宝 编辑:程序博客网 时间:2024/06/14 00:40
上一篇演示了一个简单的基于TCP/IP 双向的控制台聊天程序,
本篇基于Java的UDP实现类
DatagramSocket / DatagramPacket
展示下如何用这两个类完成一个简单的通信。由于时间仓促,读和写两个并发线程的编写并没有调试成功,欢迎完成的小伙伴留言 附上代码 或者 讲出为什么像示例这样做不行的原因,灰常感谢。
Server 端
package com.test.socket;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.InetSocketAddress;import java.util.Scanner;/** * Created by szh on 2017/9/12. */public class UDPSocketServer extends Thread { public static DatagramSocket datagramSocket = null; public static InetAddress senderAddr = null; public static int senderPort = -1; static { try { datagramSocket = new DatagramSocket(new InetSocketAddress(InetAddress.getByAddress(new byte[]{127, 0, 0, 1}), 8080)); } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { try { while (true) { byte[] buffer = new byte[8192]; DatagramPacket packet = new DatagramPacket(buffer, 8192); datagramSocket.receive(packet); String msg = new String(packet.getData()); senderAddr = packet.getAddress(); senderPort = packet.getPort(); System.out.println("Sender :\n addr -> " + senderAddr + "\n port -> " + senderPort + "\nMsg : " + msg); } } catch (Exception e) { e.printStackTrace(); } finally { datagramSocket.close(); } } public static void main(String[] args) { try { //将Server 绑定在本地的127.0.0.1 8080端口 DatagramSocket datagramSocket = new DatagramSocket(new InetSocketAddress(InetAddress.getByAddress(new byte[]{127, 0, 0, 1}), 41002));// //创建一个读取客户端发送消息的进程 并启动// new UDPSocketServer().start();//// Scanner scanner = new Scanner(System.in);// String line = null;// while (!(line = scanner.nextLine()).equals("exit")) {// if (senderPort != -1 && senderAddr != null) {// byte[] byteMsg = line.getBytes();// datagramSocket.send(new DatagramPacket(byteMsg, 0, byteMsg.length, senderAddr, senderPort));// }// } while (true) { byte[] buffer = new byte[8192]; DatagramPacket packet = new DatagramPacket(buffer, 8192); datagramSocket.receive(packet); String msg = new String(packet.getData()); senderAddr = packet.getAddress(); senderPort = packet.getPort(); System.out.println("Sender :\n addr -> " + senderAddr + "\n -> port " + senderPort + "\nMsg : " + msg); } } catch (Exception e) { e.printStackTrace(); } finally { datagramSocket.close(); } }}
Client 端
package com.test.socket;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Scanner;/** * Created by szh on 2017/9/12. */public class UDPSocketClient { public static InetAddress serverAddr = null; public static int serverPort = -1; static { try { serverAddr = InetAddress.getByAddress(new byte[]{127, 0, 0, 1}); serverPort = 41002; } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { DatagramSocket datagramSocket = null; try { datagramSocket = new DatagramSocket(42000+ (int)Math.floor(Math.random()*1000)); Scanner scanner = new Scanner(System.in); String line = null; while (!(line = scanner.nextLine()).equals("exit")) { byte[] byteMsg = line.getBytes(); if (serverPort != -1 && serverAddr != null){ DatagramPacket sendPacket = new DatagramPacket(new byte[0], 0, serverAddr, serverPort); sendPacket.setData(byteMsg); System.out.println("发送消息"); datagramSocket.send(sendPacket); } } } catch (Exception e) { e.printStackTrace(); } finally { datagramSocket.close(); } }}
测试截图:
1.
2.
3.
阅读全文
0 0
- JavaSE socket 基于UDP Server/Client的实现
- 简单的socket UDP Client Server通信
- 基于TCP/UDP的Server-Client
- 基于Udp的socket 实现
- Linux下的socket协议UDP Client/Server程序
- python实现udp Server/Client
- 编程实现基于UDP的socket应用
- 基于I/O的Server/Client实现
- 基于UDP的socket
- UDP-server/client实现字符大写转换
- 简单的Client / Server 使用 linux 伯克利 socket实现 编辑
- 如何实现基于UDP的socket的通信
- C socket TCP/UDP client/server example codes
- 简单实现基于UDP的Socket多线程通信
- 简单实现基于UDP的Socket单线程通信
- java 实现socket基于UDP的双机通讯
- LWIP中基于UDP SOCKET组播功能的实现
- Socket实现基于UDP的单线程通信
- 9.12第一轮扫荡战果
- Java 线程同步基础类 LockSupport 解析
- Java实现几种常见排序方法
- 【CUGBACM15级BC第35场 A】hdu 5194 DZY Loves Balls
- JAVA入门学习小结(二)枚举类型
- JavaSE socket 基于UDP Server/Client的实现
- 20170912_字符串拷贝strcpy的实现
- 纯虚函数和抽象类
- Python的global关键字及全局变量的用法
- ThreadLocal实现原理
- ionic2入门
- ubuntu关闭防火墙
- HDOJ 1533.Going Home 最小费用最大流
- idea对接github