• TCP通信-快速入门


    TCP通信模式演示

    注意:在java中只要是使用java.net.Socket类实现通信,底层即是使用了TCP协议。 

    Socket api

    public Socket(String host , int port) 创建发送端的Socket对象与服务端连接,参数为服务端程序的ip和端口。

    OutputStream getOutputStream()

    InputStream getInputStream()

    客户端发送消息

    创建客户端的Socket对象,请求与服务端的连接。

    使用socket对象调用getOutputStream()方法得到字节输出流。

    使用字节输出流完成数据的发送。

    释放资源:关闭socket管道。

    客户端代码

    1. /**
    2. 目标:完成Socket网络编程入门案例的客户端开发,实现1发1收。
    3. */
    4. public class ClientDemo1 {
    5. public static void main(String[] args) {
    6. try {
    7. System.out.println("====客户端启动===");
    8. // 1、创建Socket通信管道请求有服务端的连接
    9. // public Socket(String host, int port)
    10. // 参数一:服务端的IP地址
    11. // 参数二:服务端的端口
    12. Socket socket = new Socket("127.0.0.1", 7777);
    13. // 2、从socket通信管道中得到一个字节输出流 负责发送数据
    14. OutputStream os = socket.getOutputStream();
    15. // 3、把低级的字节流包装成打印流
    16. PrintStream ps = new PrintStream(os);
    17. // 4、发送消息
    18. ps.println("我是TCP的客户端,我已经与你对接,并发出邀请:约吗?");
    19. ps.flush();
    20. // 关闭资源。
    21. // socket.close();
    22. } catch (Exception e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. }

    ServerSocket(服务端) API

    public ServerSocket(int port) 注册服务端端口。

    public Socket accept() 等待接收客户端的Socket通信连接, 连接成功返回Socket对象与客户端建立端到端通信。

    服务端实现接收消息

    创建ServerSocket对象,注册服务端端口。

    调用ServerSocket对象的accept()方法,等待客户端的连接,并得到Socket管道对象。

    通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。

    释放资源:关闭socket管道

    服务端代码

    1. /**
    2. 目标:开发Socket网络编程入门代码的服务端,实现接收消息
    3. */
    4. public class ServerDemo2 {
    5. public static void main(String[] args) {
    6. try {
    7. System.out.println("===服务端启动成功===");
    8. // 1、注册端口
    9. ServerSocket serverSocket = new ServerSocket(7777);
    10. // 2、必须调用accept方法:等待接收客户端的Socket连接请求,建立Socket通信管道
    11. Socket socket = serverSocket.accept();
    12. // 3、从socket通信管道中得到一个字节输入流
    13. InputStream is = socket.getInputStream();
    14. // 4、把字节输入流包装成缓冲字符输入流进行消息的接收
    15. BufferedReader br = new BufferedReader(new InputStreamReader(is));
    16. // 5、按照行读取消息
    17. String msg;
    18. if ((msg = br.readLine()) != null){
    19. System.out.println(socket.getRemoteSocketAddress() + "说了:: " + msg);
    20. }
    21. } catch (Exception e) {
    22. e.printStackTrace();
    23. }
    24. }
    25. }

    TCP通信的基本原理

    客户端怎么发,服务端就应该怎么收。

    客户端如果没有发消息,服务端会进入阻塞等待。

    Socket一方关闭或者出现异常、对方Socket也会失效或者出错。

  • 相关阅读:
    浏览器API 文字转语音
    【异常】springboot集成@Cacheable缓存乱码的问题解决方案
    C# 读取多条数据记录导出到 Word 标签模板
    无损以太网的ROCE革命,队列的缓存空间优化分析
    leetcode:2535. 数组元素和与数字和的绝对差(python3解法)
    什么?MySQL 8.0 会同时修改两个ib_logfilesN 文件?
    TOGAF(企业架构)
    第二十五章 源代码文件 REST API 参考(七)
    C++动态内存分配
    css中的一些符号代表什么选择器
  • 原文地址:https://blog.csdn.net/daqi1983/article/details/133884052