本文使用三个类完成客户端与服务端的 Socket 通信。
Client:客户端,可完成信息收发
Server:服务端,监听客户端请求,为了方便,也可以收发信息
MessageHandleRunnable:实际收发信息的 Runnable 类
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(1325);
System.out.println("========Server is standing by========");
while (true) {
Socket socket = server.accept();
MessageHandleRunnable runnable = new MessageHandleRunnable(socket);
new Thread(runnable).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
System.out.println("========Client started========");
try {
Socket socket = new Socket("localhost", 1325);
Runnable client = new MessageHandleRunnable(socket);
new Thread(client).start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class MessageHandleRunnable implements Runnable {
public MessageHandleRunnable(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
// 读取线程
Runnable readRunnable = new Runnable() {
@Override
public void run() {
try {
inStream = socket.getInputStream();
Scanner in = new Scanner(inStream);
// 读取消息
while (in.hasNextLine()) {
System.out.println(in.nextLine());
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
Thread read = new Thread(readRunnable);
read.start();
// 发送线程
Runnable writeRunnable = new Runnable() {
@Override
public void run() {
try {
outStream = socket.getOutputStream();
pWriter = new PrintWriter(outStream, true);
// 发送消息
while (true) {
String msg = inRead.nextLine();
pWriter.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
Thread write = new Thread(writeRunnable);
write.start();
}
private Scanner inRead = new Scanner(System.in);
private Socket socket = null;
private InputStream inStream = null;
private OutputStream outStream = null;
private PrintWriter pWriter = null;
}
本文介绍了一个简单的Java Socket通信实例,包括服务端与客户端的搭建。通过三个类:Server、Client及MessageHandleRunnable实现双向信息收发。Server类监听指定端口,接受连接请求;Client类主动发起连接;MessageHandleRunnable类负责消息的发送与接收。

被折叠的 条评论
为什么被折叠?



