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();
    }
}


目录
相关文章
|
25天前
|
负载均衡 网络协议 算法
|
1月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
54 9
|
1月前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
43 7
|
16天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
59 3
|
19天前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
39 4
|
27天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
1月前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
|
1月前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
55 9
|
26天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
27天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议