网络编程
应用层 | Telent FTP SMTP DNS HTTP | 应 |
表示层 | Telent FTP SMTP DNS HTTP | 用 |
会话层 | Telent FTP SMTP DNS HTTP | 层 |
传输层 | TCP UDP | |
网络层 | IP ARP RARP ICMP | |
数据链路层 | 各种通信 | 网络 |
物理层 | 网络接口 | 接口 |
TCP(transfer control protocol)
一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议 。特点
面向连接
点到点的通信
高可靠性
占用系统资源多、效率低
UDP(User DatagramProtocol )
一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务特点:
非面向连接,传输不可靠,可能丢失
发送不管对方是否准备好,接收方收到也不确认
可以广播发送
非常简单的协议,开销小
IP地址
用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。
IP地址分为
IPv4:32位地址
IPV6:128位地址
IP和端口的关系:
IP地址好比每个人的地址(门牌号),端口好比是房间号。必须同时指定IP地址和端口号才能够正确的发送数据
//使用getLocalHost方法创建InetAddress对象
InetAddress addr = InetAddress.getLocalHost();
System.out.println(addr.getHostAddress()); //返回:192.168.88.197
System.out.println(addr.getHostAddress()); //返回 163服务器的ip:61.135.253.15
System.out.println(addr.getHostName()); //输出:www.163.com
InetAddress addr = InetAddress.getLocalHost();
System.out.println(addr.getHostAddress()); //返回:192.168.88.197
System.out.println(addr.getHostName()); //输出计算机名
//根据域名得到InetAddress对象
addr = InetAddress.getByName(“www.163.com”);System.out.println(addr.getHostAddress()); //返回 163服务器的ip:61.135.253.15
System.out.println(addr.getHostName()); //输出:www.163.com
URL(Uniform Resource Locator)
统一资源定位符,由4部分组成:协议 、存放资源的主机域名、端口号和资源文件名。URL是指向互联网“资源”的指针。
Socket套接字
Socket实际是网络传输层供给应用层的编程接口。传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信。Socket就是应用层与传输层之间的桥梁
TCP编程
用户输入用户名密码,服务器给出登录成功或失败的提示
1.服务器创建ServerSocket,需要指定监听的端口,会在指定端口监听并处理请求; 2.ServletSocket通过accept()
2.接收用户请求并返回对应的Socket,否则一种处于监听等待状态,线程也被阻塞
3.客户端创建Socket,需要指定服务器的ip和端口号,向服务器发送请求和接收响应
4.客户端发送数据需要输出流(写),客户端获取反馈数据需要输入流(读) 服务端反馈数据需要输出流(写),服务端获取请求数据需要输入流(读)
5.socket.getInputStream() socket.getOutputStream() 可以获取网络通信对方的流
6.一旦使用ServerSocket和Socket建立了网络连接后,网络通信和普通IO流操作并没有太大区别
7.网络通信输出流建议使用DataOutputStream和ObjectOutputStream,与平台无关,
输入流相应使用DataIntputStream和ObjectInputStream
8.如果是字符串通信也可以使用BufferedReader和PrintWriter/BufferedWriter,简单方便
9.关闭socket产生的流,会同时关闭掉Socket
2.接收用户请求并返回对应的Socket,否则一种处于监听等待状态,线程也被阻塞
3.客户端创建Socket,需要指定服务器的ip和端口号,向服务器发送请求和接收响应
4.客户端发送数据需要输出流(写),客户端获取反馈数据需要输入流(读) 服务端反馈数据需要输出流(写),服务端获取请求数据需要输入流(读)
5.socket.getInputStream() socket.getOutputStream() 可以获取网络通信对方的流
6.一旦使用ServerSocket和Socket建立了网络连接后,网络通信和普通IO流操作并没有太大区别
7.网络通信输出流建议使用DataOutputStream和ObjectOutputStream,与平台无关,
输入流相应使用DataIntputStream和ObjectInputStream
8.如果是字符串通信也可以使用BufferedReader和PrintWriter/BufferedWriter,简单方便
9.关闭socket产生的流,会同时关闭掉Socket