聊聊、Java 网络编程
Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一。Java 网络编程又包括 TCP、UDP,URL 等模块。TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块。URL 对应 URL 模块。其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议。两者之间的异同就不在这里说了,推荐一本入门书籍 《TCPIP入门经典》。我们开始 Socket 服务端和客户端编程吧。
一、【Socket 服务端】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | package www.rockcode.com.tnetty.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * @author xums * SocketServer * TODO * 2017年5月4日-上午11:07:49 */ public class SocketServer { public static void main(String[] args) { SocketServer server = new SocektServer(); server.init(); } public void init(){ ServerSocket serverSocket = null ; Socket socket = null ; BufferedReader br = null ; PrintWriter pw = null ; try { serverSocket = new ServerSocket( 9999 ); socket = serverSocket.accept(); br = new BufferedReader( new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(socket.getOutputStream()); String msg = br.readLine(); while ( null !=msg){ System.out.println( "收到消息:" +msg); msg = br.readLine(); } } catch (IOException e) { e.printStackTrace(); } finally { if ( null !=pw){ pw.close(); } if ( null !=br){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if ( null !=socket){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } |
二、【Socket 客户端】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | package www.rockcode.com.tnetty.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.Socket; /** * @author xums * SocketClient * TODO * 2017年5月4日-上午10:47:20 */ public class SocketClient { public static void main(String[] args) { SocketClient client = new SocketClient(); client.init(); } public void init(){ Socket socket = null ; BufferedReader br = null ; PrintWriter pw = null ; try { socket = new Socket(); socket.connect( new InetSocketAddress( 9999 ), 5000 ); socket.setKeepAlive( true ); //默认false if (socket.isConnected()){ br = new BufferedReader( new InputStreamReader(System.in)); pw = new PrintWriter(socket.getOutputStream(), true ); //如果第二个参数不选择 true 或者 只选一个参数,那么发完消息要记得 flush() String msg = "" ; while ( true ){ boolean alive = socket.getKeepAlive(); //判断服务端是否在线 if (!alive){ throw new Exception( "服务端不在线!" ); } else { msg = br.readLine(); if ( null !=msg){ System.out.println( "发送消息:" +msg); pw.println(msg); //pw.flush(); } } } } } catch (Exception e) { System.out.println(e.getMessage()); } finally { if ( null !=pw){ pw.close(); } if ( null !=br){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if ( null !=socket){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } |
Socket 编程是必须熟悉的知识点,即使现在有不少的开源通信框架出现,例如 Mina、Netty、Cindy 等等。现在商业上用的最多还是 Netty,从最原始的 Java IO 到 Java NIO,再到 Java AIO,再到 Netty 等。其底层离不开 Socket ,所有技术的更新和不断发展都是背后业务在驱动。人们追求高效率,高速度,高质量的通信,促使开源框架日新月异。关于开源通信框架以后再讲,和大家一起学习,谢谢大家观看!
分类:
Java
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目