----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
网络编程
(一) UDP协议与TCP协议有什么不同?
UDP英文全称:User Datagram Protocol用户数据报协议
TCP英文全称:Transmission Control Protocol传输控制协议
两者协议的不同点:
(1)传输数据时,是否需要建立连接
UDP:将数据源和目的封装成数据包中,不需要建立连接
TCP:建立连接,形成传输数据的通道
(2)数据是否有限制大小
UDP:每个数据报的大小限制在64k内
TCP:在连接中进行大数据量传输
(3)协议是否可靠
UDP:因无连接,是不可靠协议
TCP:通过三次握手完成连接,是可靠协议
(4)效率比较
UDP:不需要建立连接,速度快
TCP:在传输时,因为建立连接,效率会稍低
(5)适用的范围不同
UDP:由于传输的效率快的特点。一般常用于:聊天工具,视频会议,桌面共享等等
TCP:由于建立传输数据的通道,是可靠的连接。一般常用于:打电话,下载等等
(二) 域名解析
域名解析:先解析ip地址,再在DNS中查找对应的ip地址所对应的网站
友情提示:域名解析先解析的是本地地址,如果能查询到,就直接返回,查询不到,在到在网络上进行查找并解析
(三) Socket:
1,含义:理解为是通讯的两端,数据在Socket之间进行传输
2,特点:
(1) Socket就是为网络服务提供的一种机制。
(2) 通信的两端都有Socket。
(3) 网络通信其实就是Socket间的通信。
(4) 数据在两个Socket间通过IO传输。
(四)UDP传输
(1)UDP传输—发送端
思路:1,建立udp的socket服务。
2,将要发送的数据封装到数据包中。
3,通过udp的socket服务将数据包发送出去(使用的是send方法)。
4,关闭socket服务。
友情提示:
(1)DatagramPacket:表示数据报包
(2)DatagramSocket:表示用来发送和接收数据报包的套接字
(2)UDP传输—接收端
思路:1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析这些数据
3,使用socket服务的receive方法将接收的数据存储到数据包中(该方法是阻塞式的,也就是没有接收到数据,就一直处于等待状态,直到接收到数据为止)
4,通过数据包的方法解析数据包中的数据。
5,关闭资源
友情提示:使用UDP协议,对于发送端与接收端,这两个随便先启动哪个都是可以的原因:UDP传输,简单的说:就是面向无连接,不可靠,数据快
(3)UDP协议—聊天程序
思路:
发送端:
1, 将需要发送的数据,改成键盘录入:
BufferedReaderbufr = new BufferedReader(new InputStreamReader(System.in));
接收端:
1, 将接收端使用while循环,也就是说:接收端一直处于接收状态,来一个数据就接收一次(注意:流不能关闭)。
这样一个简单的聊天室就已经创建好了。拓展:利用多线程编写聊天室。
(五)TCP传输
(1)TCP传输—客户端
思路:
1,创建tcp客户端socket服务。使用的是Socket对象。
建议该对象一创建就明确目的地。要连接的主机。
2,如果连接建立成功,说明数据传输通道已建立。
该通道就是socket流 ,是底层建立好的。既然是流,说明这里既有输入,又有输出。
想要输入或者输出流对象,可以找Socket来获取。
可以通过getOutputStream(),和getInputStream()来获取两个字节流。
3,使用输出流,将数据写出。
4,关闭资源。
友情提示:socket流是底层建立好的,说明这里既有输入又有输出,想要输入或者输出流对象,可以找Socket来获取
(2)TCP传输—服务端
思路:
1,创建服务端socket服务。通过ServerSocket对象。
2,服务端必须对外提供一个端口,否则客户端无法连接。
3,获取连接过来的客户端对象。
4,通过客户端对象获取socket流读取客户端发来的数据,并打印在控制台上。
5,关闭资源。关客户端,关服务端。
(3)练习:TCP协议—文本转换客户端
思路:
1,创建socket客户端对象。
2,获取键盘录入。
3,将录入的信息发送给socket输出流。
//1,创建socket客户端对象。
Sockets = new Socket("192.168.1.100",10004);//主机的ip地址和端口号
//2,获取键盘录入。
BufferedReaderbufr =new BufferedReader(newInputStreamReader(System.in));
//3,socket输出流。
PrintWriterout = new PrintWriter(s.getOutputStream(),true); //true自动刷新
(4)练习:TCP协议—文本转换服务端
思路:
1,serversocket服务。
2,获取socket对象。
3,源:socket,读取客户端发过来的需要转换的数据。
4,目的:显示在控制台上。
5,将数据转成大写发给客户端。
//1,创建一个服务端并明确其端口号
ServerSocketss = new ServerSocket(10004);
//2,获取socket对象。
Socket s = ss.accept();
//获取ip.
Stringip = s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected");
//3,获取socket读取流,并装饰。
BufferedReaderbufIn=newBufferedReader(newInputStreamReader(s.getInputStream()));
//4,获取socket的输出流,并装饰。
PrintWriterout = new PrintWriter(s.getOutputStream(),true);
(5)常见的客户端与服务端
1,常见的客户端:
浏览器:IE
2,常见的服务端
服务器:Tomcat
友情提示:TCP/IP与UDP是传输层的规则,http:是应用层的规则,ftp:网际层
(6)客户端和服务器端工作的原理
GET / HTTP/1.1 请求行 请求方式 /myweb/1.html 请求的资源路径 http协议版本。
请求消息头 .属性名:属性值
Accept: image/gif, image/x-xbitmap,image/jpeg, image/pjpeg, application/x-shockwave-flash,
application/vnd.ms-excel,application/vnd.ms-powerpoint, application/msword, */*能解析各种应用程的的格式
Accept: */*
Accept-Language: zh-cn,zu;q=0.5 解析的语言为中文
Accept-Encoding: gzip, deflate 对接收的数据进行压缩
User-Agent: Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.1; SV1; InfoPath.2) 使用的版本
Host: 192.168.1.100:9090 主机地址
Connection: Keep-Alive 保持数据连接
//空行
//请求体。
友情提示:需要注意的是:请求体与请求消息头它们之间的区分是用空格来区分的
(7)URL&URLConnection
URL:(Uniform Resource Locator)代表一个统一资源定位符,它是指向互联网“资源”的引用(资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询)
(8)网络架构
1,C/S client/server
特点:
该结构的软件,客户端和服务端都需要编写。
可发成本较高,维护较为麻烦。
好处:
客户端在本地可以分担一部分运算。
2,B/S browser/server
特点:
该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。
开发成本相对低,维护更为简单。
缺点:所有运算都要在服务端完成。
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------