黑马程序员 网络编程笔记总结

来源:互联网 发布:搬砖数据芯片哪个图好 编辑:程序博客网 时间:2024/06/05 10:30

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

网络模型:

OSI(Open System Interconnection开放系统互连)参考模型

TCP/IP参考模型


网络通讯要素:

IP地址:(InetAddress)网络中设备的标识。不易于记忆,可以用主机名。

本地回环地址:127.0.0.1主机名:localhost

端口号:用于标识程序的逻辑地址,不同进程的标识。

有效端口:0~65535,其中0~1024系统使用或者保留端口,最好不要使用。


传输协议:通讯的规则。

常见协议

UDP:

将数据及源和目的封装成数据包,不需要建立连接。

每个数据大小限制在64k之内。

因为无连接,所以是不可靠协议(没有目的地直接丢弃),但是速度快。

TCP:(必须建立连接,无连接不通信)

建立连接,形成传输数据的通道。

在连接中进行大数据量传输。

通过三次握手完成连接,是可靠协议。

必须建立连接,效率稍低。

IP对象:InetAddress:构造方法私有,不能直接创建对象。

InetAddressgetByName(String host):在给定主机名的情况下确定主机的ip地址。

InetAddressgetLocalHost():返回本地主机。

InetAddress[]getAllByName(String host)

ip.getHostAddress(), ip.getHostName()

域名解析:

DNS域名解析服务器

网络传输需要通过Socket来实现

Socket(插座):套接字

Socket就是为网络服务提供的一种机制。

通信的两端都有Socket。Socket是网络通讯的端点。

网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。


UDP传输:

DatagramSocket:表示用来发送和接收数据报包的套接字。

DatagramPacket:用来实现无连接包投递服务每条报文根据该包中包含信息从一台机器路由到另一台机器。


建立UDP接收端的思路。

1.建立UDP socket服务。因为是接收数据,要明确接收的是哪个端口的数据。

2.创建数据包用于存储接收到的数据。方便用数据包对象的方法解析这些数据。

3.使用socket服务的receive方法,将接收的数据存储到数据包中。

4.通过数据包的方法解析数据包中的数据。

5.关闭资源。


创建UDP传输的发送端思路:

1.建立UDP的Socket服务。

2.将要发送的数据封装到数据包中。

3.通过UDP的Socket服务将数据包发送出去。

4.关闭Socket服务。

-----------------------------------------------------------------

TCP:

Socket(客户端套接字)和ServerSocket(服务端)

TCP传输,客户端建立的过程。


客户端发送数据到服务端。

1.创建tcp客户端socket服务,使用的是socket服务。

建议对象一创建就明确目的地。要连接的主机。

2.如果连接建立成功,就说明数据传输通道已建立。

该通道就是Socket流是底层建立好的。既然是流,说明既有输入,又有输出

想要输入或者输出流对象,可以找Socket来获取。

可以通过getInputStream()和getOutputStream()来获取两个字节流。

3.使用输出流,将数据写出。

4.关闭资源。


建立TCP服务端的思路:

1.创建服务端Socket服务,通过ServerSocket

2.服务端必须对外提供一个端口,否则客户端无法连接。

3.获取连接过来的客户端对象。

4.通过客户端对象获取socket流读取客户端发来的数据。

打印在控制台上。

5.关闭资源。关客户端,关服务端。

Socket类的方法:

shutdownOutput():禁用此套接字的输出流,既结束此流。

shutdownInput():

-----------------------------------------------------------------

小练习:

客户端输入字母数据,发送给服务端,

服务端收到后显示在控制台,并将该数据转成大写返回给客户端。

直到客户端输入over 转换结束。

创建一个英文大写转换服务器。

客户端:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TransClient {public static void main(String[] args) throws UnknownHostException, IOException {Socket s = new Socket("127.0.0.1",10008);//获取键盘录入BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));PrintWriter out = new PrintWriter(s.getOutputStream(),true);//4.socket输入流,读取服务端返回的大写数据。BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line=bufr.readLine())!=null){if("over".equals(line))break;out.println(line);//读取服务端发回的大写数据。String upperStr = bufIn.readLine();System.out.println(upperStr);}s.close();}}


服务端:

public class TransServer {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(10008);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip);//获取socket读取流,并装饰BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//获取socket的输出流,并装饰。PrintWriter out = new PrintWriter(s.getOutputStream(),true);String line = null;while((line=bufIn.readLine())!=null){System.out.println(line);out.println(line.toUpperCase());}s.close();ss.close();}}

常见的客户端:浏览器  IE

常见的服务端:服务器  Tomcat

为了了解其原理:
1.自定义服务端,使用已有的客户端IE,了解下客户端给服务器端发送了什么请求。

发送的请求是:
GET/ HTTP1.1请求行:请求方式/myweb/.html
请求的资源路径,http协议版本
请求消息头:属性名:属性值
空行
请求体(请求头和请求体之间有行空格)
服务端发回的应答消息。
应答行,http的协议版本,应答状态码,应答状态描述信息。
应答消息属性信息。属性名:属性值
应答体。

URL:同一资源定位符。指向互联网资源的指针。
URI:统一资源标识符。
URN:统一资源名称。
每个URL都是URI,定位符是标识符中的一种。


URL对象可以直接解析URL地址。
StringgetProtocol();获取此URL的协议名称。
StringgetHost();获取此URL的主机名
intgetPort()获取此URL的端口号
StringgetPath();获取此URL的路径
StringgetFile()获取此URL的文件名
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();
相当于:
InputStream in = url.openStream();


两种常见的网络结构:
1.C/S client/server
特点:
该结构的软件,客户端和服务端都需要编写。
开发成本较高,维护较为麻烦。
优点:客户端在本地可以分担一部分运算。
2.B/S browser/srever
特点:
该结构的软件只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。
开发成本相对低,维护更为简单。
缺点:
所有运算都在服务端完成。



----------- android培训java培训、java学习型技术博客、期待与您交流! ------------



原创粉丝点击