Java实现基于TCP的通讯程序实例解析
本文将详细讲解如何使用Java实现基于TCP的通讯程序。
环境准备
首先,你需要安装Java开发环境(JDK或者OpenJDK)。建议选择较新版本,以确保兼容性和安全性。
代码实现
1. 服务端代码实现
服务端首先需要创建一个ServerSocket对象,指定服务器的端口号。然后通过ServerSocket对象的accept()方法等待客户端的连接。一旦有连接请求,accept()方法就会返回一个Socket对象,服务端就可以通过Socket对象与客户端进行通讯。
以下是服务端的代码示例:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
// 创建一个ServerSocket对象
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端已启动,等待客户端连接...");
// 等待客户端的连接
Socket socket = serverSocket.accept();
System.out.println("客户端已连接!");
// 接收客户端发送的数据
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
len = is.read(buffer);
String data = new String(buffer, 0, len);
System.out.println("客户端消息:" + data);
// 向客户端发送响应数据
OutputStream os = socket.getOutputStream();
String responseData = "Hello, Client!";
os.write(responseData.getBytes());
System.out.println("服务端已向客户端发送:" + responseData);
// 关闭资源
os.close();
is.close();
socket.close();
serverSocket.close();
}
}
2. 客户端代码实现
客户端需要先创建一个Socket对象,并指定服务端的IP地址和端口号。然后通过Socket对象与服务端进行通讯。
以下是客户端的代码示例:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
// 创建一个Socket对象,并指定服务端的IP地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
System.out.println("已连接到服务器!");
// 向服务端发送数据
OutputStream os = socket.getOutputStream();
String data = "Hello, Server!";
os.write(data.getBytes());
System.out.println("客户端已发送消息:" + data);
// 接收服务端的响应数据
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
len = is.read(buffer);
String responseData = new String(buffer, 0, len);
System.out.println("服务端消息:" + responseData);
// 关闭资源
is.close();
os.close();
socket.close();
}
}
示例说明
示例一:发送文件
以下示例演示了如何使用Java实现向服务端发送文件:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
File file = new File("example.txt");
// 向服务端发送文件
OutputStream os = socket.getOutputStream();
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
System.out.println("文件发送成功!");
// 关闭资源
fis.close();
os.close();
socket.close();
}
}
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
Socket accept = serverSocket.accept();
// 接收文件
InputStream is = accept.getInputStream();
File file = new File("example.txt");
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
System.out.println("文件接收成功!");
// 关闭资源
fos.close();
is.close();
accept.close();
serverSocket.close();
}
}
示例二:多线程服务端
以下示例演示了如何使用Java实现多线程的服务端,可以同时处理多个客户端的连接请求。
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端已启动,等待客户端连接...");
while (true) {
// 等待客户端的连接
Socket accept = serverSocket.accept();
System.out.println("客户端已连接!");
// 新建线程处理客户端请求
new Thread(() -> {
try {
// 接收客户端发送的数据
InputStream is = accept.getInputStream();
byte[] buffer = new byte[1024];
int len;
len = is.read(buffer);
String data = new String(buffer, 0, len);
System.out.println("客户端消息:" + data);
// 向客户端发送响应数据
OutputStream os = accept.getOutputStream();
String responseData = "Hello, Client!";
os.write(responseData.getBytes());
System.out.println("服务端已向客户端发送:" + responseData);
// 关闭资源
os.close();
is.close();
accept.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现基于TCP的通讯程序实例解析 - Python技术站