------- android培训、java培训、java基础学习技术总结、期待与您交流! ----------
网络程序
1.找到对方Ip
2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给
这些网络应用程序都用数字进行标识。
为了方便称呼这个数字,叫做端口,逻辑端口
3.定义通信规则,这个通讯规则成为协议。
轨迹组织定义了通用协议Tcp/Ip.
网络模型:按层次对网络进行细致化的划分
OSI参考模型 ,TCP参考模型
1.OSI:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
2.TCP/Ip:应用层,传输层,网际层,主机至网络层
主机对网络数据的处理:本地主机进行逐层封包,目的进行逐层拆包
Ip地址:网络中的设备标识,不易理解;可用主机名
本地回环地址:127.0.0.1 主机名:localhost
Tcp与Udp
Udp
将数据及源和目的封装数据包中,不需要建立连接
每个数据包的大小限制在64K内
因无连接,是不可靠协议,容易丢包
不需要建立连接,速度快
udp:qq聊天,视频聊天,视频会议,下载。
Tcp
建立连接,形成传输数据的通道
在连接中进行大数据传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低
Socket
Socket就是为网络服务提供的一种机制
通信的两端都有Socket
网络通信其实就是Socket间通信
数据在两个Socket间通过IO传输。
获取Ip信息示例如下:
import java.net.InetAddress; import java.net.UnknownHostException; public class IpDemo { public static void main(String[] args) throws UnknownHostException { InetAddress[] inet=InetAddress.getAllByName("www.baidu.com"); System.out.println(inet.toString()); System.out.println(inet[0]); for(int i=0;i<inet.length;i++) { System.out.println(inet[i].getHostAddress()); System.out.println(inet[i].getHostName()); } // System.out.println("address:"+inet.getHostAddress()); //System.out.println("name:"+inet.getHostName()); //如果没有解析成功,主机名还是Ip地址。 } }
UdpSend类:用于信息的发送.
通过Udp传输方式,将一段文字数据发送出去
思路:
1.建立UdpSocket服务
2.提供数据,并将数据封装到数据包
3.通过Socket服务的发送功能,将数据包发出去
4.关闭资源
public class UdpSend { 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(); DatagramPacket dp= new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),10000); ds.send(dp); } ds.close(); } }
UdpRecv,用于信息的接收:
需求:
* 定义udpsocket服务,通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识
* 方便于明确哪些数据过来该应用程序可以处理。
* 1.定义一个应用程序,用于读取Udp协议传输的数据并处理,
* 2.定义一个数据包,因为要存储接收到的字节数据。
* 因为数据包对象中有更多的功能可以提取字节数据存入已定义好的数据包中。
* 3.通过socket服务的receive方法可以将收到的数据存入已定义好的数据包中。
* 4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
* 5.关闭资源。
class UdpRecv{ public static void main(String[] args) throws IOException{ DatagramSocket ds=new DatagramSocket(10000); while(true){ byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,0,buf.length); ds.receive(dp); String ip=dp.getAddress().getHostAddress(); String data=new String(dp.getData(),0,dp.getLength()); System.out.println(ip+"::"+data); /*System.out.println("Address:"+dp.getAddress().getHostAddress()); System.out.println("port:"+dp.getPort()); System.out.println("url:"+dp.getSocketAddress()); */ } } }
在一个窗口中同时发送和接收,代码示例如下:
class Send implements Runnable{ DatagramSocket ds; Send(DatagramSocket ds){ this.ds=ds; } public void run() { try{ 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(); DatagramPacket dp= new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),10004); ds.send(dp); } ds.close(); }catch(IOException e){ e.printStackTrace(); } } } class Recv implements Runnable{ DatagramSocket ds; Recv(DatagramSocket ds){ this.ds=ds; } public void run() { try { while(true){ byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,0,buf.length); ds.receive(dp); String ip=dp.getAddress().getHostAddress(); String data=new String(dp.getData(),0,dp.getLength()); System.out.println(ip+"::"+data); } } catch (IOException e) { e.printStackTrace(); } } } public class IpDemo2 { public static void main(String[] args) throws SocketException { DatagramSocket sendSocket=new DatagramSocket(); DatagramSocket recvSocket=new DatagramSocket(10004); new Thread(new Recv(recvSocket)).start(); new Thread(new Send(sendSocket)).start(); } }
相关推荐
黑马程序员linux服务器开发网络编程配套文档,很好的参考资料
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 ...day11_网络编程 day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案
含书签,可检索 01_Python基础 02_linux基础 03_python高级 ...06_网络编程 07_正则表达式课件 08_数据结构和算法 09_MySQL 10_mongo 11_redis 12_前端 13_django 14_爬虫 15_tornado 16_shell 17_微信公众号
黑马程序员《Python快速编程入门》习题答案与分析 希望能帮助到同学们
Linux网络编程第二版.ppt,详细介绍了linux网络编程的相关技术,是初学者相当好的入门教材
每日作业卷JavaSE第11天网络编程传智播客.黑马程序员基础题练习一:ip地址和端口号概念描述:请写出IP地址的概念:请写出端口号的概念:练习二:UDP协议判
解析Python网络爬虫_复习大纲.docx
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
Java是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级语言。是一种面向Internet的编程语言。 随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。是简单易学,完全...
04.C++核心编程 05.C++ STL编程 06.QT实战编程 07.Linux系统基础知识 08.Linux系统编程 09.Linux网络编程 10.数据库编程
2015/1/20 星期二 Android应用开发-网络编程 2015/1/21 星期三 Android应用开发-网络编程 2015/1/22 星期四 2015/1/23 星期五 Android应用开发-页面跳转和数据传递 2015/1/24 星期六 Android应用开发-广播和服务 ...
Python使用技巧,实战应用...详细介绍了一些Python框架的各种功能和模块,以及如何使用Python进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者,能够帮助你快速上手JPython并掌握其高级特性。
ANDROID移动开发基础案例教程,黑马程序员。人民邮电出版社。本书从初学者的角度出发,采用案例驱动式教学方法,对Android基础知识进行讲解。在案例设计上力求贴合实际需求,真正做到把书本上的知识应用到实际开发中...
去黑马程序员培训就是要有心理准备吧,你想吃、住的好还是需要钱包鼓。 我当时学的物流项目和我工作的内容很多共通点。比如SpringBoot整合ES实现订单数据的查询和检索,还有通过echarts可视化各项数据,还有用地图...
JAVA netty完整示例代码。里面包括整个项目和所需的JAR包。示例以:TCP/IP自定义报文协议...备注:netty是JAVA高性能TCP/IP网络编程,有很多数据存储工具:ELASTICSEARCH和HBASE都是用基于NETTY编程,值得研究学习。
全书内容包括Linux概述、Linux安装、Linux基本配置、桌面环境基本操作、Shell基本命令、...编程、服务器基础知识、Apache服务器、vsftpd服务器、Samba服务器、NFS服务器、任务计划、防火墙和网络安全、病毒和木马防范...
1.1 MFC是一个编程框架 1 1.1.1 封装 1 1.1.2 继承 2 1.1.3 虚拟函数和动态约束 2 1.1.4 MFC的宏观框架体系 2 1.2 MDI应用程序的构成 3 1.2.1 构成应用程序的对象 3 1.2.2 构成应用程序的对象之间的关系 5 1.2.3 ...
《Java网络编程》 《Spring实战》 《深入理解Java虚拟机》 《Java核心技术 卷Ⅰ / Ⅱ》 :television:学习课程 【廖雪峰】Java教程 【龙果学院】Java并发编程原理与实战 【龙果学院】深入理解Java虚拟机(jvm性能调优...
Android移动开发基础案例教程(第2版)_PPT.zip
@学习路线根据黑马程序员学习路线改编 Part1: Java基础&Web基础 Java基础 面向对象思想 集合框架 IO流 多线程与并发 异常处理 网络编程 数据库 MySQL Oracle JDBC C3P0 Druid 前端技术 HTML CSS JavaScript jQuery ...