本文共 2820 字,大约阅读时间需要 9 分钟。
在计算机网络中,连接和通信的规则被称为网络通信协议。这些协议对数据的传输格式、传输速率和传输步骤等做了统一规定。最常用的协议是TCP/IP协议组,包括TCP和IP协议。
TCP/IP协议分为四层:
IP地址用于标识计算机,目前普及的是IPv4,每个IP地址由4个字节组成。IPv6则由16个字节组成,解决了IPv4地址不足的问题。IP地址分为A、B、C类和特定地址如127.0.0.1(本地回环地址)。
端口号用于区分应用程序,范围是0-65535。常用端口号0-1023用于网络服务,1024以上用于用户应用。
InetAddress类用于处理IP地址。常用方法包括:
getAddress():获取IP地址字节数组。getByName(String host):通过主机名获取IP地址。getHostAddress():获取IP地址字符串。getHostName():获取主机名。示例:
InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost.getHostAddress());InetAddress baiDuAddress = InetAddress.getByName("www.baidu.com");System.out.println(baiDuAddress.getHostAddress()); UDP是无连接协议,通信时不建立连接,适合实时应用如视频会议。常用类包括DatagramSocket和DatagramPacket。
TCP是面向连接的协议,建立连接后确保数据可靠传输。连接过程包括三次握手建立连接,四次挥手断开连接。适合可靠数据传输,如文件下载。
UDP通信不建立连接,数据通过DatagramPacket封装发送或接收。发送端需要指定目标IP和端口,接收端只需接收数据。
DatagramPacket用于封装UDP数据,构造方法有:
DatagramPacket(byte[] buf, int length)DatagramPacket(byte[] buf, int offset, int length)DatagramPacket(byte[] buf, int length, InetAddress addr, int port)DatagramPacket(byte[] buf, int offset, int length, InetAddress addr, int port)DatagramSocket用于创建UDP发送端和接收端。构造方法有:
DatagramSocket()DatagramSocket(int port)DatagramSocket(int port, InetAddress addr)示例:发送端:
DatagramSocket client = new DatagramSocket(7777);DatagramPacket packet = new DatagramPacket("Hello World".getBytes(), "localhost", 8888);client.send(packet); 接收端:
DatagramSocket receiver = new DatagramSocket(8888);byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);receiver.receive(packet);System.out.println(new String(packet.getData(), 0, packet.getLength()));
TCP通信建立连接,确保数据可靠传输。JDK提供ServerSocket和Socket类。
ServerSocket用于创建服务器端程序,常用构造方法:
ServerSocket()ServerSocket(int port)ServerSocket(int port, int backlog)ServerSocket(int port, int backlog, InetAddress addr)常用方法:
accept(): 等待客户端连接。bind(SocketAddress endpoint)isClosed()close()Socket用于创建客户端程序,常用构造方法:
Socket()Socket(String host, int port)Socket(InetAddress address, int port)常用方法:
getPort()getInputStream()getOutputStream()close()服务端:
ServerSocket server = new ServerSocket(7788);Socket clientSocket = server.accept();OutputStream os = clientSocket.getOutputStream();os.write("服务器响应".getBytes());os.close();clientSocket.close(); 客户端:
Socket client = new Socket(InetAddress.getLocalHost(), 7788);InputStream is = client.getInputStream();byte[] buf = new byte[1024];int len = is.read(buf);System.out.println(new String(buf, 0, len));is.close();client.close();
通过以上方法,可以实现TCP和UDP通信,适用于不同场景的网络编程需求。
转载地址:http://bghq.baihongyu.com/