Java实现简单的socket通信教程
1. 什么是Socket
Socket是一种通讯机制,用于在不同进程之间传递数据,包括TCP/IP和UDP两种。Java提供了java.net包来实现Socket功能,可以方便地进行网络编程。
2. 实现Socket通信的步骤
- 建立服务端Socket对象;
- 监听客户端请求并接受连接请求;
- 建立客户端Socket对象并连接服务端;
- 在服务端和客户端之间进行数据传输。
3. 实现一个简单的Socket通信
3.1 服务端代码
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("服务端已启动,等待连接...");
Socket s = ss.accept();
System.out.println("客户端已连接");
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = br.readLine();
System.out.println("客户端发送的消息为:" + data);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("服务端已接收到消息:" + data);
pw.flush();
s.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.2 客户端代码
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 8888);
System.out.println("已连接到服务端");
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("你好,服务端");
pw.flush();
String data = br.readLine();
System.out.println("服务端的回复为:" + data);
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.3 运行结果
执行Server代码,输出
服务端已启动,等待连接...
执行Client代码,输出
已连接到服务端
服务端的回复为:服务端已接收到消息:你好,服务端
4. 实现多线程的Socket通信
如果服务端需要同时处理多个客户端请求,就需要使用多线程来实现Socket通信。
4.1 服务端代码
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
while (true) {
System.out.println("服务端已启动,等待连接...");
Socket s = ss.accept();
System.out.println("客户端已连接");
Thread t = new Thread(new ClientHandler(s));
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
static class ClientHandler implements Runnable {
private Socket s;
public ClientHandler(Socket socket) {
this.s = socket;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = br.readLine();
System.out.println("客户端发送的消息为:" + data);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("服务端已接收到消息:" + data);
pw.flush();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4.2 客户端代码
客户端代码与3.2中的代码相同。
4.3 运行结果
启动Server代码后,多个客户端可以连接到服务端并进行通信。每个客户端的消息都会被服务端接收并回复。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现简单的socket通信教程 - Python技术站