极简tcp通信程序只需四步:一连(socket连接)、一读(readline)、一写(write+flush)、一关(close所有资源)。服务端用serversocket监听,accept后读写一行即关闭;客户端连本地8080端口,println发送、readline接收,随后关闭socket。

用 ServerSocket 和 Socket 写极简网络通信程序,核心是“一连一读一写一关”,不加线程、不加循环、不处理异常细节,只保留 TCP 连接最本质的四步。下面直接给出可运行、易理解、无冗余的最小实现。
服务端:监听一个端口,收一条消息就回传并退出
关键点:用 ServerSocket(8080) 监听,accept() 阻塞等待,用 BufferedReader 读一行,BufferedWriter 写回同一行,然后关闭所有资源。
- 端口号选 8080 或 9999 等未被占用的常用测试端口
- 读写都用
readLine()和write()+flush(),避免字节错乱 - 必须调用
br.close()、bw.close()、s.close()、ss.close(),否则连接不释放
客户端:连上服务端,发一条消息,收一条响应就结束
关键点:用 Socket("127.0.0.1", 8080) 连本地服务端,PrintWriter 发送(自动换行),BufferedReader 接收一行。
-
PrintWriter构造时加true参数可自动 flush,省去手动调用 - 发送内容末尾需含
\n(println自带),否则服务端readLine()会一直等 - 客户端也要关闭 socket,否则系统句柄泄漏
避坑提醒:几处新手常错的细节
这些地方看着小,但一错就“程序没报错却收不到消息”:
- 服务端和客户端端口号必须完全一致
- 客户端 IP 写
"127.0.0.1"(不是"localhost",某些环境解析慢或失败) - 服务端先启动,再运行客户端;否则客户端抛
Connection refused - 读写流方向别反:服务端
getInputStream()是读客户端发来的,getOutputStream()是写给客户端的 - Windows/macOS/Linux 都支持,无需额外配置
运行验证方式
打开两个终端:
- 终端1:编译运行服务端 → 输出“服务器已启动,等待连接…”后停住
- 终端2:编译运行客户端 → 客户端打印服务端返回的消息,服务端也打印收到的内容
- 两方均正常退出,无异常堆栈,即表示通信成功











