Java 网络编程TCP协议之发送数据和接收数据的详解

简介: Java 网络编程TCP协议之发送数据和接收数据的详解

TCP协议:

  1. 传输控制协议(Transmission Control Protocol)
  2. TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端和服务器端,由客户端向服务器端发出连接请求,每次连接的创建都要经历“三次握手”。
  3. 三次握手: TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
    第一握手,客户端向服务器发出连接请求,等待服务器确认。
    第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
    第三次握手,客户端再次向服务器端发送确认消息,确认连接。
  4. 完成三次握手,连接建立后,客户端和服务器就可以开始数据传输了。由于这种面向连接的特性,TCP协议可以保证数据传输的安全,所以应用十分广泛,例如上传文件,下载文件,浏览网页等。

接下来我们看下面这张图来再次理解三次握手

接下来我们来使用TCP发送数据,和接收数据

一、创建一个类来发送数据,代码如下,注释已经在代码中给出

/*
      TCP发送数据的步骤:
      1.创建客户端的Socket对象(Socket)
      2.获取输出流,写数据
      3.释放资源
   */
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //创建客户端的Socket对象(Socket)
        //Socket(InetAddress address,int port) 创建流套接字并将其连接到指定ip地址的指定端口号
//        Socket socket = new Socket(InetAddress.getByName("192.168.0.124"),10000);
        //Socket(String host,int port) 创建流套接字并将其连接到指定主机上的指定端口号
        Socket socket = new Socket("192.168.0.124", 10000);
        //获取输出流,写出数据
        OutputStream os = socket.getOutputStream();
        os.write("hello,TCP,我来了".getBytes());
        //释放资源
        socket.close();
    }
}

二、接收客户端发送来的数据,显示在控制台

/*
        TCP接收数据的步骤:
            1.创建服务器端的Socket对象(ServerSocket)
            2.获取输入流,读数据,并把数据显示在控制台上
            3.释放资源
     */
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //创建服务器端的Socket对象(ServerSocket)
        //ServerSocket(int port)创建绑定到指定端口的服务器套接字
        ServerSocket serverSocket = new ServerSocket(10000);
        //Socket accept() 侦听要连接到此套接字并接受它
        Socket socket = serverSocket.accept();
        //获取输入流,读数据,并把数据显示到控制台
        InputStream is = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String data = new String(bys, 0, len);
        System.out.println("数据是:" + data);
        //释放资源
        serverSocket.close();
    }
}

之后我们来通过一个练习,来加深TCP的使用

一、客户端发送数据,接收服务器反馈

/*
    客户端:发送数据,接收服务器反馈
 */
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //创建客户端的Socket对象
        Socket socket = new Socket("192.168.0.124", 10000);
        //获取输出流,写数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,TCP,我来了".getBytes());
        //接收服务器的反馈
        InputStream inputStream = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = inputStream.read(bys);
        System.out.println("客户端:" + new String(bys, 0, len));
        //释放资源
        socket.close();
    }
}

二、服务器:接收数据,给出反馈

/*
    服务器接收数据,给出反馈
 */
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //创建服务器端的Socket对象(ServerSocket)
        ServerSocket serverSocket = new ServerSocket(10000);
        //监听客户端连接,返回一个Socket对象
        Socket socket = serverSocket.accept();
        //获取输入流,读数据,并把数据显示在控制台
        InputStream inputStream = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = inputStream.read(bys);
        System.out.println("服务器:" + new String(bys, 0, len));
        //给出反馈
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("数据已经收到".getBytes());
        //释放资源
        serverSocket.close();
    }
}


目录
相关文章
|
7月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
528 12
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
631 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
384 0
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
373 13
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
853 3
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解

热门文章

最新文章