网络编程(UDP)
来源:互联网 发布:sql存储过程返回值 编辑:程序博客网 时间:2024/05/02 01:16
网络编程(UDP)
网络编程的三要素:
1.IP:用来标识一台计算机(唯一性)
2.(逻辑)端口:用来标识某一进程的唯一性
3.传输协议:UDP/TCP
DOS:ipconfig /all :查看IP地址DOS: hostnmae :查看主机名
UDP:
俩端(服务端,客户端)不需要建立就连接
传输的数据大小有限制,不超过64KB
不可靠连接(效率高)
TCP:
俩端需要建立连接
传输的数据大小没有限制
可靠连接(效率不高)
InetAddress
此类表示互联网协议(IP)地址
常用方法:
static InetAdress getByName(String host);
给定主机名的情况下确定主机名的IP地址
String host :主机名或IP字符串
1.getHostAdress():获取IP 2.getHostName():获取主机名
DatagramSocket
此类表示用来发送和接收数据报包的套接字
[发送端] 步骤: 创建客户端Socket 对象:DatagramSocket(int port:端口号(0~65535),InetAddress laddr) 创建数据报包的对象:DatagramPocket 发送:send 释放资源 代码: public static void main(String[] args) throws Exception { //创建发送端对象 DatagramSocket ds = new DatagramSocket(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入消息"); String s ; while((s = br.readLine())!=null){ System.out.println("请输入消息"); byte[] buf = s.getBytes(); //创建数据报包 DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.0.27"), 8887); //发送 ds.send(dp); } //释放资源 ds.close(); } }[服务端] 步骤: 创建服务端Socket对象 创建数据报包用来接收数据 接收数据:receive 解析数据 释放资源 代码: public static void main(String[] args) throws Exception { // 建立服务端对象 DatagramSocket ds = new DatagramSocket(8887); while (true) { byte[] bys = new byte[1024]; // 创建数据报包用来接收对象 DatagramPacket dp = new DatagramPacket(bys, bys.length); //接收数据 ds.receive(dp); //解析数据 byte[] data = dp.getData(); System.out.println(new String(data,0,data.length)); } } 结果: 请输入消息 你好 请输入消息 Hello 请输入消息 null 请输入消息 请输入消息 你好 Hello null
需求:
编写程序,通过UDP协议,完成多线程版本的聊天室程序。
代码: public class UDPClient implements Runnable { DatagramSocket ds; public UDPClient(DatagramSocket ds) { this.ds = ds; } @Override public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入消息"); String s; try { while ((s = br.readLine()) != null) { System.out.println("请输入消息"); byte[] buf = s.getBytes(); // 创建数据报包 DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.0.27"), 8887); // 发送数据 ds.send(dp); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class UDPServer implements Runnable { DatagramSocket ds; public UDPServer(DatagramSocket ds) { this.ds = ds; } @Override public void run() { try { while (true) { byte[] bys = new byte[1024]; // 创建数据报包用来接收对象 DatagramPacket dp = new DatagramPacket(bys, bys.length); // 接收数据 ds.receive(dp); // 解析数据 byte[] data = dp.getData(); System.out.println(new String(data, 0, data.length)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class UDPTest { public static void main(String[] args) throws Exception { // 创建服务端对象 DatagramSocket receive = new DatagramSocket(8887); // 创建发送端对象 DatagramSocket send = new DatagramSocket(); // 启动线程 new Thread(new UDPServer(receive)).start(); new Thread(new UDPClient(send)).start(); } } 结果: 请输入消息 nihao 请输入消息 nihao 请输入消息 再见 请输入消息 再见
阅读全文
0 0
- 网络编程(UDP)
- 网络编程UDP(一)
- C++网络编程(UDP)
- 网络编程(UDP-聊天)
- 网络编程(UDP聊天)
- 网络编程(4)--UDP
- 网络编程(2)UDP
- Java网络编程(UDP)
- JAVA--网络编程(UDP)
- python 网络编程(udp)
- 网络编程(UDP协议)
- 网络编程(UDP协议)
- Linux--网络编程(二)UDP编程
- Linux网络编程--(4)UDP编程
- UNIX网络编程笔记(6)—UDP网络编程
- 网络编程-基于UDP的Socket网络编程(补充)
- 自学篇-网络编程UDP(八)
- JAVA 网络编程 UDP(聊天程序)
- JS之闭包总结学习
- 剑指offer(9)—变态跳台阶
- IDEA:从安装到使用步骤记录
- 经典排序算法
- 区块链原理学习-区块链结构
- 网络编程(UDP)
- Judge Route Circle
- java自带线程池和队列详细讲解
- 网络编程(TCP)
- awk
- 反射
- Python使用wxPython实现计算器
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- Python 如何优雅的将数字转化为时间格式