当前位置:   article > 正文

Java通信原理(1)——TCP/IP协议_java tcp

java tcp

一、计算机网络的基本概念

        1、计算机网络

                (1)、概念:计算机网络即通过通信线路相互连接,使其能够交换数据、共享资源、协同工作。

                (2)、组成:计算机网络由计算机、设备硬件、协议、服务组成一个局域网、广域网、互联网。

        2、网络协议

                (1)、目的:设计网络通信规则、标准、服务。

                (2)、内容:数据格式、传输效率、传输控制。

二、Java通信协议

        传输层协议模式

                TCP(传输控制协议):

                        TCP相对于UDP比较稳定的传输协议,这里存在三次握手,保证连接状态,同时有明确的客户端和服务端之分 TCP服务中需要服务器端先启动,需要监听指定端口,等待客户端连接。 客户端主动连接服务器,和服务器连接之后,才可以进行数据交互,服务器不能主动连接客户端的。简单来说TCP类似打电话的通信协议,必须保证双方都在线时才能传输数据。

                UDP(用户数据报协议):

                        UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一个台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。简单来说UDP类似发短信的过程,双方不必要都在线。

(本章主要围绕TCP展开)

三、Java Socket模型

        1、套接字        

  • 启动server socket,监听在本机某个端口是否有socket连接,若存在也会创建一个socket对象
  • 存在一对socket对象,通过从socket对象获取流信息,并进行数据传输

        2、网络IO流

  • 输入流:从对方向本方输入
  • 输出流:本方向对方输出

四、代码实现

        实现简单的TCP传输可以创建两个客户端

        1、客户端A

  1. public class ASide {
  2. public static void main(String[] args) {
  3. try {
  4. //创建TCP的Socket对象并初始化目标端口
  5. ServerSocket socket = new ServerSocket(58888);
  6. //输出当前IP地址
  7. System.out.println("初始化完成"+socket.getInetAddress() + "");
  8. System.out.println("监听中");
  9. //当监听到有端口向A发送信息时接收数据
  10. Socket A = socket.accept();
  11. //输出连接地址
  12. System.out.println("当前连接为:"+A.getInetAddress());
  13. //信息发送
  14. //从控制台获取输入信息
  15. String message = new Scanner(System.in).next();
  16. //将输入信息转化为字节形式并保存在列表中
  17. byte [] data = message.getBytes();
  18. //新建输出流,开始向对方发送信息
  19. OutputStream os = A.getOutputStream();
  20. //传入需要发送的数据
  21. os.write(data);
  22. //刷新
  23. os.flush();
  24. //关闭服务,避免资源占用
  25. os.close();
  26. A.close();
  27. }catch (Exception e){
  28. e.printStackTrace();
  29. }
  30. }
  31. }

        2、客户端B

  1. public class BSide {
  2. public static void main(String[] args) {
  3. //新建一个字节列表用于接收信息
  4. byte [] msg = new byte[2048];
  5. try {
  6. //初始化客户端B的Socket对象
  7. Socket b = new Socket("127.0.0.1" , 58888);
  8. System.out.println("B连接"+b.getLocalPort());
  9. //创建输入流用于接收信息
  10. InputStream insB = b.getInputStream();
  11. //将接收的信息存入列表中
  12. insB.read(msg);
  13. //将列表中的信息转换为字符串
  14. int len = msg.length;
  15. String newMsg = new String(msg , 0 , len);
  16. System.out.println(newMsg);
  17. }catch (Exception e){
  18. e.printStackTrace();
  19. }
  20. }
  21. }

        3、运行

                运行时先启动客户端A,并输入需要发送的内容,再启动客户端B

                A:

                B:

                客户端A控制台中输入信息并回车

 

 

                 客户端B接收消息

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/704303
推荐阅读
相关标签
  

闽ICP备14008679号