一、网络编程基础
1.1 网络编程有两个主要的问题:
①: 如何准确定位网络上的一台或多台主机 ②: 定位后如何可靠高效的传输数据
在TCP/IP中,IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定网络上的一台主机. 而TCP层提供面向应用的数据传输机制,这是网络编程的主要对象.
1.2 基本概念:
端口号: 网络通信时同一机器上的不同进程的标识(其中0~1023为系统保留的端口号),端口范围: 0~65535 套接字: IP : 端口号 资源名: 是资源的完整地址,包括主机名,端口号,文件名,如http://www.sun.com (协议名://主机名)http://home.netscape.com/home/welcome.html(协议名://机器名+文件名) 协议名:指明获取资源时所使用的传输协议。 如http,ftp,gopher,file
1.3 关于UDP:
UDP: 无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上任何可能路径传往目的地 ,不可靠性(发送方发送的数据报不一定以相同次序到达接收方),传输效率高,有大小限制(每个数据报大小不超过64KB),.
1.4 获取网络信息和资源:
1.4.1 非常重要的一个类: InetAddress (IP地址的封装类)
http://java.net中很多类使用到了它,如ServerSocket, Socket , DatagramSocket等
1.4.2 常用方法:
获取本机主机名: InetAddress.getLocalHost().getHostName() 获取本机IP: InetAddress.getLocalHost().getHostAddress() 获取本机端口: serverSocket = new ServerSocket(6666); serverSocket.getLocalPort();
服务器端获取客户端IP: Socket socket = serverSocket.accept(); socket.getInetAddress().getHostAddress(); 服务器获取客户端端口: String.valueOf(socket.getPort())
二、基于TCP的网络通信:
2.1 通过套接字建立连接的过程:
![c9d99a1aa0814e7545e0569cc132e853.png](https://img-blog.csdnimg.cn/img_convert/c9d99a1aa0814e7545e0569cc132e853.png)
2.2 实例:
客户端:
package
运行图:
![a544f4400af0d68ff47c3fa69ad6da30.png](https://img-blog.csdnimg.cn/img_convert/a544f4400af0d68ff47c3fa69ad6da30.png)
服务器端:
package
运行图:
![48b6c75604478ffa1b0fe7e305877ea2.png](https://img-blog.csdnimg.cn/img_convert/48b6c75604478ffa1b0fe7e305877ea2.png)
客户端与服务器通信:
![9d9db81e37237a8e9ae2742a7ce610a7.png](https://img-blog.csdnimg.cn/img_convert/9d9db81e37237a8e9ae2742a7ce610a7.png)
三、基于UDP的网络通信:
3.1 实例:
package
运行两次,出现两个窗口,在这两个窗口进行通信**
运行图:
![55e57c7cbd49359fb8540ac178c8ba8e.png](https://img-blog.csdnimg.cn/img_convert/55e57c7cbd49359fb8540ac178c8ba8e.png)