• 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也会失效或者出错。

  • 相关阅读:
    [HFCTF2020]EasyLogin
    Python 蝉联榜首,PHP 即将跌出前十 | TIOBE 11 月编程语言排行榜
    2024年元旦怎么放假?元旦放假时间安排表记录到待办APP
    用什么命令看Linux系统的体系架构
    【LeetCode-940 hard】不同的子序列 II
    关于mysql join 的一些说明
    哈希原理和解决哈希冲突方法
    使用 FHE 实现加密大语言模型
    Apache nginx解析漏洞复现
    ConcurrentHashMap源码解读(jdk1.8以上版本)
  • 原文地址:https://blog.csdn.net/daqi1983/article/details/133884052