目录
一、网络编程与通信模式
网络编程是指程序之间通过网络进行数据交互的技术。常见的网络通信模式包括客户端-服务器(Client-Server,CS)模式和浏览器-服务器(Browser-Server,BS)模式。
- CS模式:客户端和服务器需要程序员开发实现,用户需要安装客户端软件。
- BS模式:用户只需安装浏览器,无需安装专门的客户端软件(day12、网络编程(通信))。
二、网络通信的三要素
网络通信的实现依赖于三个关键要素:IP地址、端口号和通信协议。
1. IP地址
IP地址用于唯一标识网络中的设备。常见的IP协议版本包括IPv4和IPv6。
import java.net.InetAddress;
public class IPDemo {
public static void main(String[] args) throws Exception {
InetAddress localAddress = InetAddress.getLocalHost();
System.out.println("本机IP地址: " + localAddress.getHostAddress());
InetAddress baiduAddress = InetAddress.getByName("www.baidu.com");
System.out.println("百度IP地址: " + baiduAddress.getHostAddress());
}
}
该代码展示了如何获取本机和远程主机(如百度)的IP地址(day12、网络编程(通信))。
2. 端口号
端口号用于标识同一设备中运行的不同应用程序。端口号范围是0到65535,其中0到1023为系统保留端口,1024到49151为注册端口,49152到65535为动态端口(day12、网络编程(通信))。
3. 通信协议
通信协议规定了数据在网络中的传输方式。常用的协议有UDP协议和TCP协议(day12、网络编程(通信))。
三、UDP通信
UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,适用于对速度要求较高但对数据可靠性要求较低的场景,如视频、语音通话(day12、网络编程(通信))(day12、网络编程(通信))。
UDP通信实现
- 发送端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSender {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
String message = "Hello, UDP!";
byte[] buffer = message.getBytes();
InetAddress receiverAddress = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, receiverAddress, 8888);
socket.send(packet);
socket.close();
}
}
接收端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceiver {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("接收到的信息: " + received);
socket.close();
}
}
该代码演示了如何通过UDP进行简单的消息发送和接收(day12、网络编程(通信))(day12、网络编程(通信))。
四、TCP通信
TCP(Transmission Control Protocol)是一种面向连接的可靠传输协议,适用于对数据传输可靠性要求较高的场景,如文件传输和金融数据通信(day12、网络编程(通信))(day12、网络编程(通信))。
TCP通信实现
- 客户端:
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 9999);
OutputStream os = socket.getOutputStream();
os.write("Hello, TCP!".getBytes());
os.close();
socket.close();
}
}
服务端:
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = is.read(buffer);
System.out.println("接收到的信息: " + new String(buffer, 0, length));
is.close();
socket.close();
serverSocket.close();
}
}
该代码展示了如何通过TCP建立连接并传输数据(day12、网络编程(通信))(day12、网络编程(通信))。
五、即时通信与线程池
即时通信是一种网络通信模式,允许一个客户端发送的消息能够被其他所有客户端接收到。这通常通过服务器端的端口转发来实现,需要使用线程池来优化并发处理性能(day12、网络编程(通信))(day12、网络编程(通信))。
线程池优化
使用线程池可以提高服务器处理多客户端并发请求的能力,避免过多线程创建导致的性能开销。
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TCPThreadPoolServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(9999);
ExecutorService executorService = Executors.newFixedThreadPool(10); // 创建一个固定大小为10的线程池
while (true) {
Socket socket = serverSocket.accept();
executorService.submit(() -> {
try {
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = is.read(buffer);
System.out.println("接收到的信息: " + new String(buffer, 0, length));
// 向客户端发送响应
OutputStream os = socket.getOutputStream();
os.write("消息已收到".getBytes());
is.close();
os.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
}
六、HTTP协议与BS系统
在BS架构中,浏览器使用HTTP协议与服务器通信。服务器需要响应符合HTTP协议格式的数据,以便浏览器能够正确解析和展示(day12、网络编程(通信))(day12、网络编程(通信))。
总结
网络编程涉及多种通信模式和协议的应用,理解并正确使用这些技术能够有效实现数据在网络中的传输。通过UDP和TCP的实例代码,我们可以看到不同协议的实现差异和适用场景。这为我们在实际开发中选择合适的网络通信方式提供了指导。