java客户端服务器聊天程序流程图_基于java的socket简单聊天编程

socket编程:

一:什么是socket:socket是BSD UNIX的通信机制,通常称为“套接字”,其英文原意是“孔”或“插座”。有些顾名思义,socket正如其英文原意一样,像是一个多孔插座,可以提供多个端口的连接服务。为了更加直观的了解socket,可以用插座来比喻socket。如果说socket是一个多孔插座,插座是提供各种电器供电的地方,不同的电器工作时需要的电压和电流也不一样,但各种电器都有各自的一个插口,这个称之为“端口”。电器使用的电可以看做是网络资源或者是各种“流”,电是由电线传输过来的,所以插座需要连接电线,这里电线也就是服务器和客户端连接 “connection”。 其中初始化socket的过程像是买来一个插座的安装过程。

在插座这边的是“客户端”,电线那边提供电的发电厂是“服务器”。客户端和发电厂都各自拥有一个地址,即“IP地址”。其中还有一套传输和用电的规则,比如传输电时需要的电线多少伏才能满足需求,电器用电的技术参数,端口是几个孔的。这个是“协议”。正常情况下我们是不会去管协议的内容是什么,也就是说协议在我们面前是隐藏的。

以下是socket运作过程中所对应的网络中的各层,具体数据的在网络中的各层传输:

e5e99dc4c6cafc2eb3fc90f8032af8d5.png

二.工作原理:对于服务器来说,服务器先初始化socket,然后端口绑定(bind),再对端口监听(listen),调用accept阻塞,等待客户端连接请求。对于客户端来说,客户端初始化socket,然后申请连接(connection)。客户端申请连接,服务器接受申请并且回复申请许可(这里要涉及TCP三次握手连接),然后发送数据,最后关闭连接,这是一次交互过程。

下图是客户端和服务端之间建立连接和连接断开的流程图:

e1145a111340f32a07dd2170db2ac9a5.png

以下是具体的代码实现:

server端

d2a05ae7211ac0b0f90604ba23158032.png

c471e5bec2b3de0dfb74a8e8b0422adb.png

client端:

2d0c3b7f291293d2eec155ec0122ad81.png

4b3b9df872cffea271ffba2e697b84ad.png

对应的测试结果如下:

客户端输入hello,服务端发送hi

dac4cfc4d583920fa048d666d3ba4d4f.png

e70e46607a6770cbf68a2a7006e89742.png

由上图可以可以看出服务端收到hello,客户端收到hi,结果正确。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了。针对你的问题,我可以为你提供一些基于Java Socket的多客户端Client-Server聊天程序的实现步骤。 步骤如下: 1. 创建一个ServerSocket对象,指定端口号,用于监听客户端的连接请求。 2. 创建一个Socket对象,指定服务器的IP地址和端口号,连接到服务器。 3. 在客户端服务器之间建立输入输出流,用于数据的传输。 4. 客户端服务器发送数据,服务器接收数据并处理。 5. 服务器客户端发送数据,客户端接收数据并处理。 6. 当客户端服务器之间的通信结束时,关闭输入输出流和Socket对象。 7. 服务器继续监听客户端的连接请求,直到程序结束。 具体的实现步骤可以参考以下代码: Client.java ``` import java.net.*; import java.io.*; public class Client { public static void main(String[] args) { try { // 连接服务器 Socket socket = new Socket("127.0.0.1", 8080); System.out.println("连接服务器成功!"); // 创建输入输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); OutputStream outputStream = socket.getOutputStream(); PrintWriter writer = new PrintWriter(outputStream); InputStream inputStream = socket.getInputStream(); BufferedReader input = new BufferedReader(new InputStreamReader(inputStream)); // 向服务器发送数据 String line = null; while ((line = reader.readLine()) != null) { writer.println(line); writer.flush(); if (line.equals("exit")) { break; } } // 关闭输入输出流和Socket对象 input.close(); outputStream.close(); writer.close(); reader.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` Server.java ``` import java.net.*; import java.io.*; public class Server { public static void main(String[] args) { try { // 创建ServerSocket对象,指定端口号 ServerSocket serverSocket = new ServerSocket(8080); System.out.println("服务器已经启动,等待客户端连接..."); while (true) { // 监听客户端的连接请求,等待连接 Socket socket = serverSocket.accept(); System.out.println("客户端连接成功,IP地址为:" + socket.getInetAddress()); // 创建输入输出流 InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); OutputStream outputStream = socket.getOutputStream(); PrintWriter writer = new PrintWriter(outputStream); // 读取客户端发送的数据 String line = null; while ((line = reader.readLine()) != null) { System.out.println("客户端发送的数据:" + line); writer.println("服务器已经接收到数据:" + line); writer.flush(); if (line.equals("exit")) { break; } } // 关闭输入输出流和Socket对象 reader.close(); outputStream.close(); writer.close(); socket.close(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 这里是一个简单Java Socket客户端Client-Server聊天程序的实现。你可以根据你的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值