Java网络编程之TCP协议

      最后更新:2022-07-18 09:48:34 手机定位技术交流文章

      目录

      一、浅析TCP协议

      索克是什么?

      例3-向服务器和客户端上传图像

      4.扩展:插座流量

      五、总结

      一、浅析TCP协议

      TCP协议是建立在 lP协议之上的,简单地说,IP协议仅负责发送数据包,不保证秩序和准确性,TCP协议负责控制数据包传输,它需要在传输数据之前建立连接,一旦连接建立,数据无法传输,在传输完成后,必须切断连接。TCP协议确保可靠的数据传输,这些机制通过接收确认和加班重新传输实现。并且,TCP协议允许双向通信,这意味着通信双方可以同时发送和接收数据。
      TCP协议也是最广泛使用的,许多高级别协议是建立在TCP协议之上,例如HTTP、SMTP等。

      索克是什么?

      在开发网络应用程序的时候,会遇到Socket 这个概念。Socket是一个抽象概念,一个应用程序通过一个 Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络。

      Java提供的几个Socket相关的类就封装了操作系统提供的接口:ServerSocket类、Socket类。

      为什么索克特需要网络通信?因为仅仅通过IP地址进行通信是不够的,同一计算机同时运行多个网络应用程序,例如,浏览器,QQ,邮件客户端等。当操作系统接收数据包时,如果只有IP地址,它不能决定该发送哪个申请,所以,操作系统将接口抽象化,每个应用程序都必须与不同的接口相符,根据索克,可以正确地发送这些包到相应的应用程序。

      当使用接口进行网络编程时,它是两个过程之间的网络通信。其中一个进程必须作为服务器端服务,它积极监控指定的端口,另一个过程必须是客户,它必须主动连接到服务器的IP地址和指定的端口,如果连接成功,服务器和客户端成功建立TCP连接,双方可以随时发送和接收数据。

      因此,当Socket连接成功地在服务器端和客户端之间建立后:·对服务器端来说,它的索克是指定的IP地址和指定的端口号码;对于客户端来说,它的插座是其计算机的IP地址和操作系统指定的随机端口号码。

      例3-向服务器和客户端上传图像

      服务器端:

      为了使用索克编程,我们首先编写服务器端程序。 Java标准库提供一个ServerSocket来实现特定IP和特定端口的监视。

      图片上传服务器端:

      服务器通过上述代码,在指定的8808端口进行监控,如果ServerSocket监视成功,我们使用一个无限循环来处理客户端连接,注意代码 server.accept()意味着每次一个新的客户端连接,返回一个插座实例,这个接口实例用于与新连接的客户端进行通信。

      如果客户端没有连接,接受()方法将封锁并等待。如果多个客户端同时连接,服务器插座将连接抛入队列中,然尼一个一个处理。对于Java程序,通过一次又一次的呼叫 accept() 来获取新的连接。

      客户端:

      客户端程序比服务器简单得多

      图片上传客户端:

      客户端程序通过下述代码,连接到服务器端,注意上述代码的服务器地址是"192.168.254.137",端口号是8808。如果连接成功,将返回一个Socket实例,用于后续通信。

      4.扩展:插座流量

      当接口连接成功创建时,无论是服务器端,还是客户端,我们都使用索克特的例子来在线交流。因为TCP是一个基于流程的协议,因此,Java标准库使用工nputstream和outputstream来封装 Socket的数据流,所以我们使用插座电流,和普通IO流类似:

      写入网络数据时,必须使用 flush() 方法。如果你不叫 flush(,我们很可能会发现,客户端和服务器不接收数据,这不是Java标准库设计问题,相反,当我们把数据写成流形时,这不是直接向网络发送的只写信,相反,先写到内存缓冲器上,直到缓冲区填满,只有一次才能真正发送到网络上,该设计的目的是提高传输效率。如果缓冲区数据小,我们还想强迫这些数据发送到网络上,必须调用 flush() 来迫使缓冲数据发送出去。

      五、总结

      使用Java的TCP编程需要Socket模型:

      服务器端使用ServerSocket来监视指定的端口;

      客户端使用一个接口(InetAddress, port)连接服务器;

      服务器端接受接受()的连接并返回索克实例;

      通过使用多个线程同时处理多个客户端连接,使用线程池可以大大提高效率;

      . flush()方法用于将输出缓冲区强加到网络中。

      以上为基于TCP协议的网络编程知识共享,如果有任何不准确之处,请多做评论修正,如果您愿意,可以留下您的注意和掌声,共同学习,共同进步!


      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29976.html

          热门文章

          文章分类