博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习Java Socket网络编程(二)
阅读量:3914 次
发布时间:2019-05-23

本文共 1995 字,大约阅读时间需要 6 分钟。

Socket通信模型

大致流程:

  1. 建立连接:服务器端建立ServerSocket绑定指定端口等待连接

    客户端建立Socket向服务端发送请求

    服务端接受后创建连接Socket

  2. 开始通信:通过输入流和输出流进行数据交换

  3. 关闭Socket及相关资源

服务端ServerSocket类

/* * 服务器端 */public class Server {	public static void main(String[] args) {		try {			//1.创建服务器端socket。即ServerSocket,指定绑定的端口,并监听此端口			ServerSocket serverSocket = new ServerSocket(8888);			//2.调用accept()方法开始监听,等待客户端的连接			System.out.println("***服务器即将启动,等待客户端的连接***");			Socket socket = serverSocket.accept();			//3.获取输入流,并读取客户端信息			InputStream is = socket.getInputStream();//字节输入流			InputStreamReader isr = new InputStreamReader(is);//将字节流转换为字符流提高性能			BufferedReader br = new BufferedReader(isr);			String info = null;			while((info=br.readLine())!=null) {				System.out.println("我是服务器,客户端说:"+info);			}			socket.shutdownInput();			//获取输出流,响应客户端请求			OutputStream os = socket.getOutputStream();			PrintWriter pw = new PrintWriter(os);			pw.write("欢迎您!");			pw.flush();//刷新缓存			socket.shutdownOutput();			//5.关闭相关资源			pw.close();			os.close();			br.close();			isr.close();			is.close();			socket.close();			serverSocket.close();		} catch (IOException e) {			e.printStackTrace();		}	}}

客户端Socket类

/* * 基于TCP协议的Socket通信,实现用户登录 * 客户端 */public class Client {	public static void main(String[] args) {		try {			//1.创建客户端Socket,指定服务器地址和端口			Socket socket  = new Socket("localhost",8888);			//2.获取输出流。想服务端发送信息			OutputStream os = socket.getOutputStream();//字节输出流			PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流			pw.write("用户名:admin;密码:123");			pw.flush();			socket.shutdownOutput();			//3.获取输入流,读取服务端响应			InputStream is = socket.getInputStream();			BufferedReader br = new BufferedReader(new InputStreamReader(is));			String info = null;			while((info=br.readLine())!=null) {				System.out.println("我是客户端,服务端说:"+info);			}			socket.shutdownInput();			//4.关闭资源			br.close();			is.close();			pw.close();			os.close();			socket.close();			} catch (UnknownHostException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		}	}}

运行结果

服务端:

客户端:

转载地址:http://vwprn.baihongyu.com/

你可能感兴趣的文章
真实经历:整整一年了,他是这样从程序员转型做产品经理的
查看>>
互联网时代供应链
查看>>
WPF 使用 Expression Design 画图导出及使用 Path 画图
查看>>
使用BeetleX访问redis服务
查看>>
.NET 应用如何优雅的做功能开关(Feature Flag)
查看>>
如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法
查看>>
从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图
查看>>
.NET应用如何优雅的实现功能定时开关
查看>>
netcore一键部署到linux服务器以服务方式后台运行
查看>>
从 3.1 到 5.0 —— OpenReservation 更新记
查看>>
还在犹豫是否迁移.NET5?这几个项目已经上线了!
查看>>
Kuma 1.0 GA发布,70多项新功能和改进
查看>>
被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
查看>>
ASP.NET Core使用HostingStartup增强启动操作
查看>>
结合控制台程序和K8S的CronJob完成定时任务
查看>>
2020了,最流行的密码依旧是123456
查看>>
网传不要升级.NET5的诸多原因,你赞同几个?
查看>>
利用模板化应对ERP业务模型的快速变化
查看>>
[项目更新] 集成RabbitMQ队列与EventBus总线
查看>>
尝鲜!.NET5实操之docker+k8s,这10个坑,你不得不知!
查看>>