Java Socket 网络编程:简单示例及设计思路
Java Socket 网络编程:简单示例及设计思路
本文将使用 Java 语言实现一个简单的基于 Socket 的网络程序,并详细介绍其设计思路和实现细节。该程序包括服务端和客户端两部分,通过 TCP/IP 协议进行通信。
设计思路
-
服务端:
- 创建 ServerSocket 对象,指定端口号,监听来自客户端的连接请求。
- 当有客户端连接请求到达时,开启一个新的线程处理请求。
- 线程中获取客户端的输入流和输出流,读取客户端发送的请求数据,并进行相应的处理。
- 将处理结果写入输出流,返回给客户端。
- 最后关闭输入流、输出流和 Socket 对象,释放资源。
-
客户端:
- 创建 Socket 对象,指定服务端的 IP 地址和端口号,并连接服务端。
- 获取输入流和输出流。
- 向服务端发送数据请求。
- 读取服务端返回的结果并输出。
- 最后关闭输入流、输出流和 Socket 对象,释放资源。
代码示例
服务端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println('服务端已启动,等待客户端连接...');
while (true) {
Socket socket = serverSocket.accept();
System.out.println('客户端连接成功,启动新线程处理请求...');
new Thread(new ServerThread(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ServerThread implements Runnable {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
String request = reader.readLine();
System.out.println('客户端请求:' + request);
String response = '请求已处理,返回结果:' + request.toUpperCase();
writer.println(response);
writer.flush();
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket('127.0.0.1', 8888);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
String request = 'hello, server!';
writer.println(request);
writer.flush();
String response = reader.readLine();
System.out.println('服务端响应:' + response);
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
编译结果
服务端已启动,等待客户端连接...
客户端连接成功,启动新线程处理请求...
客户端请求:hello, server!
本示例展示了一个简单的 Socket 网络编程案例,通过服务端和客户端之间的交互,实现了简单的消息传递功能。实际应用中,可以根据具体需求扩展功能,例如实现文件传输、数据查询等操作。
原文地址: https://www.cveoy.top/t/topic/oX8z 著作权归作者所有。请勿转载和采集!