TCP通信——多发多收消息

  • 一、使用TCP通信实现:多发多收消息案例
    • (1)需求
    • (2)具体要求
    • (3)具体实现
    • (4)总结
      • ①本案例实现了多发多收,那么是否可以同时接收多个客户端的消息?
      • ②本次多发多收是如何实现的呢?
      • ③现在服务端为什么不可以同时接收多个客户端的消息呢?

一、使用TCP通信实现:多发多收消息案例

(1)需求

●使用TCP通信方式实现:多发多收消息。

(2)具体要求

●可以使用死循环控制服务端收完消息继续等待接收下一个消息。

●客户端也可以使用死循环等待用户不断输入消息。

●客户端一旦输入了exit,则关闭客户端程序,并释放资源。

(3)具体实现




/**目标:完成Socket网络编程入门案例的客户端开发,实现1发1收。*/
public class ClientDemo01 {public static void main(String[] args) {try {System.out.println("===客户端启动===");// 1、创建Socket通信管道请求有服务端的连接// public Socket(String host, int port)// 参数一:服务端的IP地址// 参数二:服务端的端口Socket socket = new Socket(InetAddress.getLocalHost(),9999);// 2、从socket通信管道中得到一个字节输出流 负责发送数据OutputStream os = socket.getOutputStream();// 3、把低级的字节流包装成打印流PrintStream ps = new PrintStream(os);Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String msg = sc.nextLine();// 4、发送消息ps.println(msg);ps.flush();}// 关闭资源。注意哦,不用时才关,不要随便关// socket.close();} catch (IOException e) {e.printStackTrace();}}
}
/**目标:开发Socket网络编程入门代码的服务端,实现接收消息*/
public class ServerDemo02 {public static void main(String[] args) {try {//先启动服务端System.out.println("===服务端启动成功===");// 1、注册端口ServerSocket serverSocket = new ServerSocket(9999);// 2、必须调用accept方法:等待接收客户端的Socket连接请求,建立Socket通信管道Socket socket = serverSocket.accept();// 3、从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();// 4、把字节输入流包装成缓冲字符输入流进行消息的接收BufferedReader br = new BufferedReader(new InputStreamReader(is));// 5、按照行读取消息String msg;while ((msg = br.readLine()) != null) {System.out.println(socket.getRemoteSocketAddress() + "说了: " + msg);}} catch (IOException e) {e.printStackTrace();}}
}

(4)总结

①本案例实现了多发多收,那么是否可以同时接收多个客户端的消息?

●不可以的。

●因为服务端现在只有一个线程,只能与一个客户端进行通信。

②本次多发多收是如何实现的呢?

●客户端使用循环反复地发送消息。

●服务端使用循环反复地接收消息。

③现在服务端为什么不可以同时接收多个客户端的消息呢?

●目前服务端是单线程的,每次只能处理一个客户端的消息

暑期JAVA学习(41.1)TCP通信——多发多收消息相关推荐

  1. TCP通信多发多收,和接收多个客户端消息

    需求使用TCP通信的方式实现:多发多收消息 具体要求 可以使用死循环控制服务端收完消息继续等待接收下一个消息 客户端也可以使用死循环等待用户不断的输入消息 客户端一旦输入exit,则关闭客户端程序,并 ...

  2. 2022Java学习笔记八十八(网络编程:UDP通信,一发一收,多发多收消息接收实现)

    2022Java学习笔记七十八(网络编程:UDP通信,一发一收,多发多收消息接收实现) 一.快速入门 DatagramPacket:数据包对象 实例代码 定义发送端 package com.zcl.d ...

  3. QT学习笔记(TCP 通信)

    TCP 通信 TCP 简介 TCP 协议(Transmission Control Protocol)全称是传输控制协议是一种面向连接的.可靠的. 基于字节流的传输层通信协议. TCP 通信必须先建立 ...

  4. UDP通信多发多收(案例)和广播组播

    使用UDP通信方式开发接收端和发送端(模拟视频弹幕系统) 分析:发送端可以一直发送消息   接收端可以不断的接收多个发送端的消息展示     发送端输入exit则结束发送端程序 UDP的接收端为什么可 ...

  5. java 实现 tcp_java实现TCP通信

    1.概述 通过ServerSocket与Socket实现的TCP的通信,这个例子配合了swing使用,其实作者之前发过一篇ServerSocker与Socket的通信,在这里,这边文章就是在这个例子上 ...

  6. Qt学习(五):TCP通信

    知识点 通信套接字和监听套接字 获取编辑器内容,发送到套接字 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/main/QTcpT ...

  7. java搭建tcp客户端_【Java学习笔记】TCP客户端/服务器端

    客户端: import java.net.Socket; import java.net.InetAddress; import java.net.UnknownHostException; impo ...

  8. Java网络编程 - TCP通信

    文章目录 TCP通信 快速入门(一发一收) 编写客户端代码 编写服务器代码 多发多收 多发多收(同时接受多个客户端) 线程池优化 TCP通信 快速入门(一发一收) TCP协议回顾: TCP是一种面向连 ...

  9. 异步tcp通信——APM.Core 服务端概述

    为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给 ...

最新文章

  1. 【前瞻】机器人领域十项前沿技术
  2. 未来货运:无人驾驶技术和卡车司机如何配合?
  3. 设计模式复习-单例模式
  4. 这个用Java写的开源音乐播放器,我粉了
  5. 移动端适配的几种解决办法
  6. 《天天数学》连载15:一月十五日
  7. vbs调用c++dll_COM编程攻略(八 动态调用与IDispatch接口)
  8. 2020-5-13从0在mac上搭载SSM新闻网站项目
  9. 此 Windows 副本不是正版的解决方案
  10. git在分支的基础上建分支
  11. GNU C 与 ANSI C(下)
  12. mysql过去12个月不存在为0_mysql 按月统计但是有几个月没有数据,需要变成0
  13. unity Mesh Renderer的一点想法
  14. 一种简便的安装使用 qemu 的方法
  15. android 分区 PT,Android:pt 、sp、dp之间的换算
  16. 农夫山泉,它欺骗我们了吗?
  17. 会计凭证、成本中心、成本要素、总账、物料标准成本核算
  18. mac 4k分辨率 字太小 27寸 hidpi_2019年两千价位你可以买到一台怎样的4K显示器?AOC U2790PQU...
  19. pgadmin mac卸载_Mac软件卸载——安全彻底地在Mac上卸载Microsoft Outlook - Mac迪迪卫...
  20. C指针与指针之间的相减操作

热门文章

  1. 【C++】最近公共祖先 LCA
  2. linux全局查找字符串,linux全局搜索命令
  3. ssh连接工具----xmanager5
  4. 为 Kubernetes 提供 CI/CD 服务 Jenkins X
  5. Kubernetes 存活探针和就绪探针的最佳实践
  6. Image Processing Algorithms
  7. 用Python自动生成Excel数据报表!
  8. python蒙特卡洛算法模拟赌博模型
  9. 吃什么蔬菜可以清理血管垃圾
  10. [笔记]n个点的基环树数量