目录
1、网络知识基础
2、UDP传输
3、利用UDP模仿聊天室
1、网络知识基础
1.1网络通讯要素
IP地址 | 标识设备,本地默认IP:127.0.0.1,主机名:localhost |
端口号 | 标识进程,有效端口号:0-65535,其中0-1024系统保留 |
传输协议 | 通讯规则,TCP,UDP等 |
1.2InetAddress类
表示互联网协议 (IP) 地址,常用方法:
getLocalHost() | 返回本地主机 |
getByName(String str) | 根据给定主机名(IP地址字符串)获得IP地址 |
getHostName() | 返回此IP地址的主机名 |
getHostAddress() | 返回IP地址字符串 |
1.3域名解析
DNS,DomainNameSystem域名系统,将我们访问网站时输入的域名(例如www.oracle.com)解析为ip.电脑里本地的DNS解析文件位于C:\Windows\System32\drivers\etc目录下的HOSTS文件,可以对其修改,添加自定义域名解析表,实现屏蔽广告页面等功能(将广告页面的网址对应127.0.0.1)
1.4URL类
URL是统一资源定位符,示例代码
public class URLDemo { public static void main(String[] args) throws IOException { URL url = new URL("http://192.168.1.100:8080/myweb/index.html?name=zhangsan"); System.out.println(url.getProtocol()); System.out.println(url.getHost()); System.out.println(url.getPort()); System.out.println(url.getFile()); System.out.println(url.getPath()); System.out.println(url.getQuery()); } }
1.5Socket简介
网络通信的端点,通信的两端都有Socket,网络通信其实就是Socket之间的通信,数据在两个Socket间通过IO传输
2、UDP传输
2.1UDP特点
User Datagram Protocol 用户数据报协议
无连接,不可靠的协议
将数据封装成数据包,每个大小限制在64K内,速度快
2.2相关类
DatagramSocket
Socket服务类,主要方法:send(),receive()等,receive方法为阻塞方法
DatagramPacket
数据报包类,用于封装和解析数据
注意
发送端和接收端是两个独立运行的程序,接收端必须明确端口号
2.3例代码
// 发送端 public class Sender { public static void main(String[] args) throws IOException { // 1:使用DatagramSocket对象,简历UDP的Socket服务 DatagramSocket socket = new DatagramSocket(); // 2:使用DatagramPacket对象,将要发送的数据封装在数据报包中 String str = "Hello World"; byte[] buf = str.getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 10000); // 3:通过Socket服务,调用send()方法将数据报包发送出去 socket.send(packet); // 4:关闭Socket服务 socket.close(); } } // 接收端 public class Receiver { public static void main(String[] args) throws IOException { // 1:使用DatagramSocket对象,简历UDP的Socket服务 DatagramSocket socket = new DatagramSocket(10000); // 2:使用DatagramPacket对象,用于接收数据报包数据 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); // 3:通过Socket的receive()方法将接受的数据存储在数据报包中 socket.receive(packet); // 4:通过数据报包对象的方法解析数据包中的数据(地址,端口,数据内容等) String ip = packet.getAddress().getHostAddress(); int port = packet.getPort(); String str = new String(packet.getData(), 0, packet.getLength()); System.out.println(ip + ":" + port + ":" + str); // 5:关闭Socket服务 socket.close(); } }
3、利用UDP模仿聊天室
将上述代码进行改进,增加多线程和发广播的功能,可以实现简易的聊天室:
//发送端任务类 public class Send implements Runnable { private DatagramSocket socket; public Send(DatagramSocket socket) { this.socket = socket; } @Override public void run() { BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); String words = null; try { while ((words = reader.readLine()) != null) { byte[] buf = words.getBytes(); // 255表示发广播 DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.255"), 10000); socket.send(packet); // 模拟结束 if ("886".equals(words)) { break; } } socket.close(); } catch (IOException e) { e.printStackTrace(); } } } //接收端任务类 public class Receive implements Runnable { private DatagramSocket socket; public Receive(DatagramSocket socket) { this.socket = socket; } @Override public void run() { try { while (true) { byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String ip = packet.getAddress().getHostAddress(); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println(ip + ":" + message); } } catch (IOException e) { e.printStackTrace(); } } } //开启聊天 public class Chart { public static void main(String[] args) throws SocketException { DatagramSocket send = new DatagramSocket(); DatagramSocket receive = new DatagramSocket(10000); new Thread(new Send(send)).start(); new Thread(new Receive(receive)).start(); } }
相关推荐
《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...
《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...
《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...
《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...
《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...
该文档主要整理了Java网络编程相关的内容,主要包括通信要素、TCP网络编程、UDP网络编程以及URL编程的相关内容及示例代码
无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...
javanet.zip 22.Java网络编程详解(Socket/UDP实例、简单聊天系统) javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25....
Java编程基础-基于UDP的网络编程2
Java网络编程基础-基于UDP的网络编程-1
javanet.zip 22.Java网络编程详解(Socket/UDP实例、简单聊天系统) javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba...
Java视频教程 Java网络编程基础 JavaUDP
附件包含Java网络编程基础详解,如UDP发送端接收端聊天、TCP客户端服务端上传下载等。关于Tomcat7绿色版下载安装,MyEclipse10安装及部署Tomcat,见我的博文:...
掌握Java网络编程:掌握Java网络编程的相关技术,如Socket、UDP、TCP、IP等,能够进行网络通信和网络编程。 掌握Java安全性编程:掌握Java安全性编程的相关技术,如加密解密、数字签名、权限管理等,能够保障应用...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDPsocket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书是一本以网络应用实例为主的实用型参考书,主要包括访问资源、网络Applet小程序、Socket、UDP协议通讯、网络组播、邮件收发、远程方法调用、多媒体数据流的传输和播放,以及常用网络工具的实例等。在配书光盘中...
讲述了网络的一些基础知识,和java的网络编程的相关知识!
Socket编程:Socket是Java中实现网络通信的基础类。通过Socket类,可以实现基于TCP和UDP协议的网络通信。TCP是一种面向连接的协议,提供了可靠的通信服务;而UDP是无连接的协议,不保证消息的可靠传输。 ...