
一发一收
Client
package tcpDemo;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1",7777);
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
Scanner sc = new Scanner(System.in);
String msg = "";
while(true) {
msg = sc.nextLine();
if(msg.equals("exit")) {
System.out.println("聊天结束");
socket.close();
}
ps.println(msg);
ps.flush();
}
}
}
Server
package tcpDemo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(7777);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg;
while((msg = br.readLine()) != null) {
System.out.println(socket.getRemoteSocketAddress() + "说了: " + msg);
}
}
}

多发多收
client
package tcpDemo;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1",7777);
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
Scanner sc = new Scanner(System.in);
String msg = "";
while(true) {
msg = sc.nextLine();
if(msg.equals("exit")) {
System.out.println("聊天结束");
socket.close();
}
ps.println(msg);
ps.flush();
}
}
}
server
package tcpDemo;
import ch.qos.logback.classic.net.server.ServerSocketReceiver;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(7777);
while(true) {
Socket socket = serverSocket.accept();
new ServerReaderThread(socket).start();
}
}
}
包装的Socket类
package tcpDemo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ServerReaderThread extends Thread {
private Socket socket;
ServerReaderThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream is = this.socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg;
while((msg = br.readLine()) != null) {
System.out.println(socket.getRemoteSocketAddress() + "说了: " + msg);
}
} catch (Exception err) {
System.out.println(socket.getRemoteSocketAddress() + "下线了");
}
}
}
线程池优化
Client
package tcpDemo;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1",7777);
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
Scanner sc = new Scanner(System.in);
String msg = "";
while(true) {
msg = sc.nextLine();
if(msg.equals("exit")) {
System.out.println("聊天结束");
socket.close();
}
ps.println(msg);
ps.flush();
}
}
}
Server
package tcpDemo;
import ch.qos.logback.classic.net.server.ServerSocketReceiver;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;
public class Server {
private static ExecutorService pool = new ThreadPoolExecutor(3,5, 6,TimeUnit.SECONDS,new ArrayBlockingQueue<>(2), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(7777);
while(true) {
Socket socket = serverSocket.accept();
Runnable target = new ServerReaderRunnable(socket);
pool.execute(target);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了