TCP

TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。

TCP通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。

Socket

Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据。根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的。

对socket的本身组成倒是比较好理解。既然是应用通过socket通信,肯定就有一个服务器端和一个客户端。所以它必然就包含有一个对应的IP地址。另外,在这个地址上server要提供一系列的服务,于是就需要有一系列对应的窗口来提供服务。所以就有一个对应的端口号(Port)。

Socket服务端

Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:

1. 构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。

2.重复如下几个步骤:

a. 调用socket的accept()方法来获得客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。

b.通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。

c.结束的时候调用socket实例的close()方法关闭socket连接。

服务端示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public   class TestTCPSend {
  public   static   void main( String [] args) {
      ServerSocket serverSocket=null;
      Socket socket=null;
      String msg= "hello client,I am server.." ;
      try {
         
         //构造ServerSocket实例,指定端口监听客户端的连接请求
         serverSocket= new ServerSocket( 8080 );
         //建立跟客户端的连接
         socket=serverSocket.accept();
         
         //向客户端发送消息
         OutputStream os=socket.getOutputStream();
         os.write(msg.getBytes());
         InputStream is=socket.getInputStream();
         
         //接受客户端的响应
         byte [] b= new   byte [ 1024 ];
         is.read(b);
         System.out.println( new   String (b));
         
      } catch (IOException e) {
         e.printStackTrace();
      } finally {
         //操作结束,关闭socket 
          try {
            serverSocket.close();
            socket.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
      } 
  }
}

Socket客户端

客户端的请求过程稍微有点不一样:

1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接。

2.通过Socket实例包含的InputStream和OutputStream来进行数据的读写。

3.操作结束后调用socket实例的close方法,关闭。

服务端示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public   class TestTCPReceive {
     public   static   void main( String [] args) {
         Socket socket=null;
         try {
            //对服务端发起连接请求
            socket= new Socket( "localhost" , 8080 );
            
            //接受服务端消息并打印
            InputStream is=socket.getInputStream();
            byte b[]= new   byte [ 1024 ];
            is.read(b);
            System.out.println( new   String (b));
            
            //给服务端发送响应信息
            OutputStream os=socket.getOutputStream();
            os.write( "yes,I have received you message!" .getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     }
}

运行测试:

先运行服务端代码,之后运行客户端。

之后可以分别在客户端和服务端看到对应的消息。

Java中通过TCP协议发送和接收数据-Socket编程相关推荐

  1. TCP协议发送和接收数据

    TCP协议发送与接收数据 一.发送数据 1.使用Socket类的构造方法创建Socket对象 Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指 ...

  2. Java中udp/tcp的发送和接收

    一.UDP协议发送数据 发送处理过程: 创建发送端Socket对象--DatagramSocket 创建数据并将数据打包到DatagramPacket对象 通过Socket发送 释放相关资源 发送处理 ...

  3. Java中使用SMTP协议发送电子邮件

    Java中使用SMTP协议发送电子邮件的具体的步骤: 1.首先需要获取发送邮件的Session对象 Session session = Session.getDefaultInstance(prope ...

  4. Android中基于TCP协议的网络通信之使用Socket进行通信

    TCP协议被称为一种端到端的协议.这是因为它为两台计算机的连接起到了重要作用:当一台计算机需要与另一台计算机进行接连时,TCP协议会他们之间建立一个连接:用于发送和接收数据的虚拟链路. TCP协议负责 ...

  5. 使用DatagramSocket发送、接收数据(Socket之UDP套接字)

    2019独角兽企业重金招聘Python工程师标准>>> 创建一个DatagramSocket实例,并将该对象绑定到指定IP地址.指定端口. 通过上面三个构造器中的任意一个构造器即可创 ...

  6. 树莓派4B的串口使用,并通过串口与其他设备经过通讯协议发送、接收数据。

    从树莓派的相关资料我们可以看到,树莓派有两个串口可以使用,一个是硬件串口(/dev/ttyAMA0),另一个是mini串口(/dev/ttyS0).硬件串口有单独的波特率时钟源,性能好,稳定性强:mi ...

  7. Java中的TCP发送和接收数据

    一.发送数据 一.Java中的TCP通信 Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信 Java为客户端提供了S ...

  8. android 网络通信方式,Android中基于TCP协议的网络通信

    一.Android网络简介 Android与服务器的通信方式主要有两种,一种是Http通信,另一种是Socket通信. HTTP通信:Android中内置HttpClient,这样可以发方便的发送Ht ...

  9. Java中使用KCP协议

    Java中使用KCP协议_何小成的成长记录-CSDN博客_java kcp Java中使用KCP协议--性能测试及应用_何小成的成长记录-CSDN博客_kcp协议 传统游戏项目一般使用TCP协议进行通 ...

最新文章

  1. 医疗信息化、医学相关资料下载
  2. .net excel循环插数据_科普:1根、2根、4根内存条插在主板内存插槽的位置
  3. 求最大公约数c语言代码_辗转相除求最大公约数原理
  4. 想Get热搜同款?GitHub开源神器让父亲重返18岁!
  5. java接收前台tex格式t数据_java 下载文件时,设置response.setContentType 根据文件类型...
  6. SAP自学指南:案例公司的需求分析
  7. MySQL left join right join inner join 区别
  8. QQ/微信表情代码表
  9. 2020软考信息系统项目管理师-上午历年真题解析视频课程-任铄-专题视频课程
  10. 输入起止坐标,返回途径网格。
  11. PS4 eye camera v2 ROS测试
  12. sort()与拉姆达表达式
  13. 科技热点周刊|GitLab 上市、LinkedIn 中国停止运营、Visual Studio 2022 正式版将发布
  14. 信息安全从业者书单推荐(2020.6.28更新)
  15. 一个springboot 项目a集成另一个springboot 项目b
  16. 快乐总动员 幸福你我他——龙营华夏第五届届亲子运动会
  17. opencv 双目摄像头拍照(分别左右镜头拍照)
  18. 转:SQL Server:获取当前日期是本月的第几周
  19. Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务
  20. 业务中台系统架构:大中台+小前台电子商务系统搭建框架思维

热门文章

  1. 整理项目管理工具,管理笔记,常用文档管理系统
  2. NDCG介绍、实现及在推荐系统中的应用实践
  3. 国产安路FPGA(一)-TD软件使用及问题记录
  4. 电力系统频率 matlab,低频减载的MATLAB仿真模型
  5. php/nginx重启命令
  6. 反向代理haproxy用法详解
  7. openwrt中磁盘未分配空间挂载
  8. 星软员工为四川地震遇难同胞默哀
  9. 受限玻尔兹曼机(RBM)学习笔记(四)对数似然函数
  10. 三态内容寻址寄存器(TCAM)