socket客户端与服务端的简单Demo
与外系统开发接口,发现系统采用的是Socket来做通信的,整理个简单的Demo,复习下基础。
客户端Demo

1 package com.socket; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.Socket; 7 8 public class SocketClientDemo { 9 public static void main(String[] args) { 10 Socket sc = null; 11 InputStream ips = null; 12 OutputStream ops = null; 13 try { 14 // 设置发送服务端的ip和端口 15 sc = new Socket("127.0.0.1", 8081); 16 // 设置超时时间 17 sc.setSoTimeout(10000); 18 // 发送服务端 19 ops = sc.getOutputStream(); 20 ops.write("Socket客户端发送请求报文内容".getBytes("UTF-8")); 21 ops.flush(); 22 System.out.println("客户端报文发送完毕"); 23 24 // 接受服务端响应的内容 25 ips = sc.getInputStream(); 26 byte[] rsp = new byte[256]; 27 // 将服务端返回的字节流读入字节数组 28 ips.read(rsp); 29 // 将字节流数组安装UTF-8的格式转换为String类型 30 String rspStr = new String(rsp, "UTF-8"); 31 System.out.println("服务端返回的响应为:" + rspStr); 32 33 } catch (Exception e) { 34 e.getStackTrace(); 35 }finally { 36 37 // 关闭流 38 if(ips != null) { 39 try { 40 ips.close(); 41 } catch (IOException e) { 42 e.printStackTrace(); 43 } 44 } 45 if(ops != null) { 46 try { 47 ops.close(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } 51 } 52 // 关闭Socket 53 if(sc != null) { 54 try { 55 sc.close(); 56 } catch (IOException e) { 57 e.printStackTrace(); 58 } 59 } 60 } 61 62 } 63 }
服务端Demo

1 package com.socket; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.ServerSocket; 7 import java.net.Socket; 8 9 public class SocketServerDemo { 10 public static void main(String[] args) { 11 ServerSocket ss = null; 12 InputStream ips = null; 13 OutputStream ops = null; 14 try { 15 // 服务端监听8081端口 16 ss = new ServerSocket(8081); 17 System.out.println("服务端已启动"); 18 // 阻塞等待客户端请求 19 Socket accept = ss.accept(); 20 // 获取客户端的输入流 21 ips = accept.getInputStream(); 22 byte[] reqByte = new byte[256]; 23 // 将输入流的内容读入字节数组 24 ips.read(reqByte); 25 String reqStr = new String(reqByte, "UTF-8"); 26 System.out.println("服务端接收到客户端请求报文:" + reqStr); 27 28 // 服务端返回信息给客户端 29 ops = accept.getOutputStream(); 30 ops.write("服务端已收到客户端的请求".getBytes("UTF-8")); 31 ops.flush(); 32 System.out.println("服务端响应完毕"); 33 34 } catch (Exception e) { 35 e.getStackTrace(); 36 }finally { 37 // 关闭流 38 if(ips != null) { 39 try { 40 ips.close(); 41 } catch (IOException e) { 42 e.printStackTrace(); 43 } 44 } 45 if(ops != null) { 46 try { 47 ops.close(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } 51 } 52 // 关闭Socket 53 if(ss != null) { 54 try { 55 ss.close(); 56 } catch (IOException e) { 57 e.printStackTrace(); 58 } 59 } 60 } 61 } 62 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)