`
Luob.
  • 浏览: 1592226 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之 23天 UDP 网络编程 (一)

    博客分类:
  • Java
阅读更多
网络编程

import java.net.InetAddress;
import java.net.UnknownHostException;


/**
 * 网络编程
 * 网络模型
 *   OSI 模型
 *   TCP/IP模型
 * 网络通讯要素
 *   IP地址
 *   端口号 
 *   传输协议:通讯协议
 *   
 * ------------------------------------- 
 *  OSI参考模型 		TCP/IP参考模型
 *  应用层			[
 *  表示层				应用层 (http /ftp /smtp)
 *  会话层			]
 *  
 *  传输层			传输层  (TCP协议)
 *  网络层			网际层  (IP协议)
 *  
 *  数据链路层			[
 *  物理层			主机至网络层]
 * ----------------------------------------------- 
 * 
 * IP地址:InetAddress
 *		网络中设备的标识
 * 		不易记忆,可用主机名
 *      本地回环地址:127.0.0.1 主机名:localhost
 * 端口号
 *		用户标识进程的逻辑地址.不同进程的标识
 *      有效端口 0~65535,其中0-1024端口系统使用或保留端口.
 * 传输协议
 *      通信的规则
 *      常见的协议:TCP  UDP
 *
 *
 * UDP:(无连接,不可靠,有限制,速度快.) 网络视频会议,宁波,聊天,桌面共享
 *     将数据及源和目的封装成数据包中,不需要建立连接
 *     每个数据包的大小限制在64k内
 *     因无连接,是不可靠协议
 *     不需要建立连接,速度快.
 *     
 * TCP: (有连接,很可靠,没限制,速度慢.) 文件下载.
 *	   建立连接,形成传输数据通道.
 *   在连接的中进行大量数传递
 *   通过三次握手完成连接.是可靠协议(三次握手:  在吗?(A) -------->在的(B)---------> 知道你在了(A)---------->B(知道了) )
 *   必须建立连接,效率稍低.
 *   
 * Socket:(插座的意思) socket370 
 *   Socket:就是为网络服务提供的一种机制.
 *   通信的两端都有Socket.
 *   网络通信其实就是Socket间的通信
 *   数据在两个Socket间通过IO传输
 *   
 * 每个协议都有不同Socket对象
 * 
 */


public class NetDemo {

	public static void main(String[] args) throws UnknownHostException {
		InetAddress i=InetAddress.getLocalHost();
		System.out.println(i.toString());
		System.out.println("address:"+i.getHostAddress());
		System.out.println("name:"+i.getHostName());
		
		System.out.println("根据主机名获取 InetAddress");
		
		/*InetAddress ia=InetAddress.getByName("192.168.1.168");
		System.out.println("address:"+ia.getHostAddress());
		System.out.println("name:"+ia.getHostName());*/

		System.out.println("根据主机名获取 InetAddress");
	/*	
		InetAddress ib=InetAddress.getByName("www.baidu.com");
		System.out.println("address:"+ib.getHostAddress());
		System.out.println("name:"+ib.getHostName());*/
		
		InetAddress[] ids=InetAddress.getAllByName("www.baidu.com");
		for (InetAddress inetAddress : ids) {
			System.out.println(inetAddress);
		}

	}

}



UDP的传输

//客户端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


/**
 * 需求:通过udp传输方式,将一段文字数据发送出去
 * 思路:
 *  1)建立updsocket服务
 *  2)提供数据,并将数据封装到数据包中
 *  3)通过socket服务的发送功能,将数据包发送出去.
 *  4)关闭资源
 */
public class UdpSend {
	public static void main(String[] args) throws IOException {
		
		//创建udp服务,通过DatagramSocket对象
		DatagramSocket ds=new DatagramSocket(8888);  //可以指定端口发送 ,否则 系统随机发送
		
		
		//2,确定数据,并封装成数据包
			byte[] buf="udp ge men lai le".getBytes();
			DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.121"),10000);
			
			//3.通过Socket服务,将已有的数据包,发送出去,通过send方法
			ds.send(dp);
		
		//4.关闭资源
		ds.close();
		
	}

}

//服务端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
 * 需求:
 * 定义一个应用程序,用于接受udp协议传输的数据并处理
 * 思路:
 *   1)定义udpSocket服务:通常会监听一个端口,其实就是给这个接受网络应用程序定义的数字标识.
 *   2)定义一个数据包,因为 要存储接收到的字节数据,因为数据包对象中有更多功能可以提取字节数据中的不同数据信息
 *   3)通过Socket服务端额receive方法将收到的数据存入一定义好的数据包中.
 *   4)通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上
 *   5)关闭资源
 */
public class UdpReceive {

	public static void main(String[] args) throws IOException {
		//1.建立udp socket 建立端点.
		DatagramSocket ds=new DatagramSocket(10000);   //服务建立一次就可以了
		while(true){
			//2.定义数据包,用于存储数据.
			byte[] buf=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buf, buf.length);
			
			//3.通过服务的receive方法将接收到的数据存入到数据包中
			ds.receive(dp);  //接受数据到数据包中,阻塞式方法.
			
			//4.通过数据包的方法 获取其中的数据.
			String ip=dp.getAddress().getHostAddress();
			String data=new String(dp.getData(),0,dp.getLength());
			int port=dp.getPort();
			System.out.println(ip+"::"+data+"::"+port);
		}
		//ds.close();
	}

}



UDP 键盘循环录入发送给服务端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend2 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		DatagramSocket ds=new DatagramSocket();
		
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		
		String line=null;
		while((line=bufr.readLine())!=null){
			if("886".equals(line))
				break;
			byte[] buf=line.getBytes();
			//255 是发广播 所有能够接受的 都能监听到.
			//192.168.1.0: 网络段
			//192.168.1.255: 广播地址
			DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.255"),10000);
			ds.send(dp);
		}
		ds.close();
		
	}
}

class UdpRece2{
	public static void main(String[] args) throws IOException{
		DatagramSocket ds=new DatagramSocket(10000);
		
		while(true){
			byte[] buf=new byte[1024*64]; //不会大于 64k 的
			DatagramPacket dp=new DatagramPacket(buf, buf.length);
			ds.receive(dp);
			String ip=dp.getAddress().getHostAddress();
			String data=new String(dp.getData(),0,dp.getLength());
			System.out.println(ip+"::"+data);
			
		}
		
	}
	
}
分享到:
评论

相关推荐

    27天java训练*(详细到每一天训练目标和内容)

    **第22-23天:Java Swing与GUI** 这部分会介绍Java的图形用户界面库Swing,如何创建窗口、按钮、文本框等组件,以及事件监听器的使用。 **第24-26天:Java网络编程** 学习者会接触Socket编程,理解TCP和UDP协议,...

    毕向东_Java 25天基础源代码

    《毕向东_Java 25天基础源代码》是一份专为初学者设计的Java编程学习资源,由知名IT教育专家毕向东精心编撰。这个资料包包含了25天的学习计划,每天的学习内容都对应一个具体的Java编程概念或技术,通过源代码的形式...

    java毕向东源代码16-25天

    这期间,学员将通过每一天的学习和编码实践,掌握从第16天到第25天的Java高级特性,如并发编程、集合框架的深入使用、IO流、网络编程、异常处理、设计模式等关键知识点。 【标签】"java-毕向东" 显示了课程的专业...

    JAVA_Super_Notebook.rar_super

    8. **网络编程**:基础的Socket编程,包括TCP和UDP通信,以及ServerSocket和Socket类的使用。 9. **JVM内存模型**:解析Java虚拟机的工作原理,包括堆内存、栈内存、方法区、本地方法栈的结构和作用,以及垃圾回收...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    java范例开发大全

    第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java...

    JAVA面试常见问题大全及解答

    Java面试中,面试官通常会关注候选人的基础知识、编程实践、设计模式以及系统架构的理解。以下是一些常见的Java面试问题及其解答: 1. **Java基本数据类型**:Java有8种基本数据类型,包括整型(byte, short, int, ...

    Java范例开发大全 (源程序)

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7...

    Java 2实用教程(第三版)实验指导与习题解答

    上机实践10 Java 中的网络编程 57 实验1 读取服务器端文件 57 实验2 使用套接字读取服务器端对象 59 实验3 基于UDP的图像传输 62 上机实践11 数据结构 66 实验1 扫雷小游戏 66 实验2 排序与查找 70 实验3 使用...

    Java范例开发大全(全书源程序)

    第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发...

    java范例开发大全(pdf&源码)

    第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java...

    JAVA面试题集锦--宝贝

    - 获取某个日期是否为当月最后一天可以通过计算该月的天数来判断。 - 格式化日期可以使用`SimpleDateFormat`类。 5. **数组和集合**:数组是固定大小的数据结构,而集合是动态可变大小的数据结构,包括`List`、`...

    最新Java面试大全

    - **判断某日期是否为当月最后一天**:通过Calendar类设置日期并比较。 - **格式化日期**:使用SimpleDateFormat或DateTimeFormatter。 #### 5. 数组和集合 - **数组**:固定长度的数据结构,用于存储同类型的元素...

    2017年下半年网络工程师考试真题 上午+下午(含答案)

    本资源是2017年下半年网络工程师考试的真题,包括上午和下午两部分,共23题,涵盖计算机系统、网络协议、编程语言、数据库等多个领域的知识点。 1. 在程序的执行过程中,Cache 与主存的地址映射是由硬件自动完成的...

    TCP-IP详解卷3:TCP事务协议

    1. **创建UDP插口** (行10-11): 使用`socket`函数创建一个UDP插口,并返回一个非负的插口描述符。如果发生错误,则通过调用`err_sys`函数终止进程并打印错误信息。 2. **填写服务器地址** (行12-15): 使用`memset`...

    2021-2022计算机二级等级考试试题及答案No.10857.docx

    23. UDP协议是面向无连接的,无法保证数据完整性,适用于对实时性要求高的场景,而非传输重要数据。 24. 数据库的模式描述了全局逻辑结构和特征,即数据库的整体逻辑视图。 25. 引用类型包括字符串(string),其他...

    2021-2022计算机二级等级考试试题及答案No.14051.docx

    计算机二级等级考试主要涵盖计算机基础知识、编程语言、数据库管理、操作系统、网络技术等多个方面的内容。以下是对题目中涉及的知识点的详细解释: 1. 数据是指存储在某一种媒体上,通常表现为物理符号,如二进制...

    2021-2022计算机二级等级考试试题及答案No.9273.docx

    23. 日期型表达式中,`DATE()+120`会返回当前日期之后120天的日期,因此B选项正确。 24. 客户机-服务器结构中,提出请求的一方是客户机,处理请求的一方是服务器,题目表述错误。 以上知识点涵盖了计算机科学的...

Global site tag (gtag.js) - Google Analytics