java-网络编程

发布时间:2026/11/11 16:00:36

java-网络编程 在Java中进行网络通信时使用TCP的方式进行传输TCP在传输时使用字符流进行传输所以我们在java中可以 这样写。在TCP通信过程中网络环境的不稳定、对端异常关闭连接或数据读写超时都可能触发各种异常。常见的异常包括IOException和SocketTimeoutException前者通常表示底层I/O操作失败例如连接被重置、管道破裂或流已关闭后者则是在设置了读取超时时间后指定时间内未收到数据时抛出。正确处理这些异常是保证程序健壮性的关键。对于异常处理推荐使用try-with-resources语法它可以自动关闭实现了AutoCloseable接口的资源简化代码并避免资源泄漏。下面给出一个使用try-with-resources的TCP客户端示例import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.SocketTimeoutException; //这里完全可以使用通配符 public class TcpClient { public static void main(String[] args) { String host 127.0.0.1; int port 8080; // try-with-resources 自动关闭 Socket 及相关流 try (Socket socket new Socket(host, port); PrintWriter out new PrintWriter(socket.getOutputStream(), true); BufferedReader in new BufferedReader(new InputStreamReader(socket.getInputStream()))) { // 设置读取超时时间为 3 秒 socket.setSoTimeout(3000); out.println(Hello, Server!); String response in.readLine(); System.out.println(服务器响应: response); } catch (SocketTimeoutException e) { System.err.println(读取超时服务器未在指定时间内响应: e.getMessage()); } catch (IOException e) { System.err.println(TCP通信发生I/O异常: e.getMessage()); } } }如果项目运行在Java 7之前的版本无法使用try-with-resources则需要使用try-catch-finally手动关闭资源。示例如下import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.SocketTimeoutException; public class TcpClientOld { public static void main(String[] args) { Socket socket null; PrintWriter out null; BufferedReader in null; try { socket new Socket(127.0.0.1, 8080); out new PrintWriter(socket.getOutputStream(), true); in new BufferedReader(new InputStreamReader(socket.getInputStream())); socket.setSoTimeout(3000); out.println(Hello, Server!); String response in.readLine(); System.out.println(服务器响应: response); } catch (SocketTimeoutException e) { System.err.println(读取超时: e.getMessage()); } catch (IOException e) { System.err.println(TCP通信发生I/O异常: e.getMessage()); } finally { // 在 finally 中逐个关闭资源避免资源泄漏 try { if (in ! null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (out ! null) { out.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (socket ! null) { socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } }在实际开发中建议优先使用try-with-resources它更简洁且不易遗漏资源关闭同时应根据业务场景合理设置超时时间并对SocketTimeoutException和IOException分别处理以便更精准地定位问题。服务端结束了Clientimport java.io.*; import java.net.*; public class TCPclient { public static void main(String[] args) { String serveradders127.0.0.1; int port8888; try ( Socket socket new Socket(serveradders, port); BufferedReader innew BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter outnew PrintWriter(socket.getOutputStream(),true); BufferedReader fnew BufferedReader(new InputStreamReader(System.in)); ){ System.out.println(已建立链接); String Lint; while(null!(Lintf.readLine())){ out.println(Lint); String reponein.readLine(); System.out.println(返回repone); } } } }用多线程的方式可以做到client-server-client的方式传输import java.io.*; import java.net.Socket; public class client { public static void main(String[] args) throws IOException { String serverAddress 127.0.0.1; int port 8888; try ( Socket socket new Socket(serverAddress, port); BufferedReader in new BufferedReader( new InputStreamReader(socket.getInputStream()) ); PrintWriter out new PrintWriter( socket.getOutputStream(), true ); BufferedReader f new BufferedReader( new InputStreamReader(System.in) ) ) { System.out.println(已建立连接); // 接收线程 Thread receiveThread new Thread(() - { try { String message; while ((message in.readLine()) ! null) { System.out.println(\n对方 message); System.out.print(我); } } catch (IOException e) { System.out.println(连接已断开); } }); receiveThread.start(); // 主线程负责发送 String message; while ((message f.readLine()) ! null) { if (message.equals(exit)) { break; } out.println(message); System.out.print(我); } } } }server:import java.io.*; import java.net.*; import java.util.*; public class server { static ListSocket clients new ArrayList(); public static void main(String[] args) throws IOException { ServerSocket serverSocket new ServerSocket(8888); System.out.println(服务器启动等待客户端连接...); while (true) { Socket socket serverSocket.accept(); System.out.println(客户端连接 socket.getInetAddress()); clients.add(socket); Thread thread new Thread(() - handleClient(socket)); thread.start(); } } static void handleClient(Socket socket) { try { BufferedReader in new BufferedReader( new InputStreamReader(socket.getInputStream()) ); String message; while ((message in.readLine()) ! null) { System.out.println(收到 message); // 转发给其他客户端 for (Socket client : clients) { if (client ! socket) { PrintWriter out new PrintWriter( client.getOutputStream(), true ); out.println(message); } } } } catch (IOException e) { System.out.println(客户端断开); clients.remove(socket); } } }
延伸阅读

更多相关文章

2026/11/10 0:46:04

uv cache prune --ci 是什么?CI 中如何缩小 uv 缓存体积

uv cache prune --ci 是什么?CI 中如何缩小 uv 缓存体积 【免费下载链接】uv An extremely fast Python package and project manager, written in Rust. 项目地址: https://gitcode.com/GitHub_Trending/uv/uv 如果你在 GitHub Actions 或 GitLab CI 中开启…

2026/11/10 1:04:42

cf前端直接上传

之前是后端上传,现在计划改前端直接传。 使用直接创建者上传还无需中间存储桶,也能省去相关的存储/流出成本 参考文档 Presigned URLs Cloudflare R2 docs https://developers.cloudflare.com/r2/api/s3/presigned-urls/ 有php版本sdk https://dev…

2026/11/11 15:59:52

在晋城电工证怎么考在哪考最省事

在晋城电工证怎么考在哪考最省事 证书过期了不知道怎么复审延期,这事儿真让人头疼。特别是在晋城,很多电工从业者因为工作变动、证书过期,导致无法继续从事相关岗位,甚至面临被单位辞退的风险。如果你正在找【在哪考】的电工证,又对如何操作一知半解,那…

2026/11/11 15:59:52

如何去办电工证报考条件与考试时间

电工证怎么考?2026河南最新政策来了,别再走弯路! 你是不是也在找电工证怎么考?急需特种作业证才能上岗找工作,但又不知道从哪儿下手?2026年河南最新政策已经出来了,如果你还不清楚流程,可能会耽误你找工作和入职机会。…

2026/11/11 15:59:52

启东应急管理局电工证官方回应学历不高也能报吗

启东应急管理局电工证官方回应学历不高也能报吗 你是不是也在担心学历不高报不了启东应急管理局电工证?别急,官方回应来了,学历不是硬门槛,关键看你能不能通过实操和理论考试。今天我就从一个一线电工的视角,讲讲这个证到底值不值得考,怎么考,还有你可…

2026/11/11 15:54:50

五级电工证多久审核怎么报名最靠谱

五级电工证多久审核怎么报名最靠谱 你不知道去哪报名怕被中介坑,看到网上一堆“包过”“免考”“代报名”的广告,根本分不清真假。五级电工证作为电工行业入门门槛,虽然属于初级证书,但报名流程和审核机制并不简单,很多人因为不了解流程,最后白白浪费了…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑