1.网络编程绪论
1.1 网络编程概念
在网络通信协议下,不同计算机上运行的程序,进行的数据传输。
常见的软件架构:
C/S(Client/Server)客户端/服务器:在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序。画面可以做的非常精美,用户体验好,需要开发客户端,也需要开发服务端,用户需要下载和更新的时候太麻烦。
B/S(Browser/Server)浏览器/服务器: 只需要一个浏览器,用户通过不同的网址。客户访问不同的服务器。不需要开发客户端,只需要页面+服务端,用户不需要下载,打开浏览器就能使用,
如果应用过大,用户体验受到影响。
1.2 网络编程三要素
IP
设备在网络中的地址,是唯一的标识!
端口号
应用程序在设备中唯一的标识。
协议
数据在网络中传输的规则,常见的协议有UDP、TCP、http、https,ftp。
2.网络编程实战
2.1 UDP
2.1.1 UDP简介
UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能。UDP的主要特点:
1.UDP是无连接的,减少开销和发送数据之前的时延。
2.UDP使用最大努力交付,即不保证可靠交付。
3.UDP是面向报文的,适合一次性传输少量数据的网络应用。
UDP格式
2.1.2 UDP实战
=一台电脑发送数据
public class Test { public static void main(String[] args) throws IOException { InetAddress address = InetAddress.getByName("10.9.6.56"); // System.out.println(address.getHostName()); // System.out.println(address.getHostAddress()); DatagramSocket datagramSocket=new DatagramSocket(); String msg="hello"; byte[] bytes = msg.getBytes(); DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length,address,10086); datagramSocket.send(datagramPacket); datagramSocket.close(); } }
一台电脑接收数据
public class Test1 { public static void main(String[] args) throws IOException { DatagramSocket datagramSocket=new DatagramSocket(10086); byte[] bytes=new byte[1024]; DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length); datagramSocket.receive(datagramPacket); byte[] data = datagramPacket.getData(); InetAddress address = datagramPacket.getAddress(); int length = datagramPacket.getLength(); System.out.println(new String(data,0,length)); System.out.println(address.getHostAddress()); datagramSocket.close(); } }
2.2 TCP
2.2.1 TCP简介
这部分内容摘自王道考研
TCP协议特点如下图:
TCP报文段是由TCP首部和TCP数据部分组成,TCP报文段首部格式如下图:
TCP三次握手如下图:
TCP连接释放四次握手如下图:
2.2.2 TCP实战
服务端代码如下;
public class Test { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(10086); Socket accept = serverSocket.accept(); InputStream inputStream = accept.getInputStream(); int b; while ((b=inputStream.read())!=-1){ System.out.println((char)b); } inputStream.close(); serverSocket.close(); } }
客户端代码如下:
public class Test1 { public static void main(String[] args) throws IOException { Socket socket=new Socket("10.9.6.56",10086); OutputStream outputStream = socket.getOutputStream(); outputStream.write("hello".getBytes()); outputStream.close(); socket.close(); } }