前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP协议发送/接收数据简单实现

TCP协议发送/接收数据简单实现

作者头像
ITer.996
发布2022-08-30 12:12:49
1.3K0
发布2022-08-30 12:12:49
举报
文章被收录于专栏:PHPer技术栈PHPer技术栈

背景

Demo 基于 Java 实现简单的 TCP 传输 / 接收协议

词义百科

TCP 协议 (传输控制协议)

TCP 协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,再传输数据。它提供了两台计算机之间的可靠无差错的数据传输。在 TCP 连接中必须要明确客户端与服务器,由客户端向服务器发送连接请求,每次连接的创建都需要经过 “三次握手” 三次握手:TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

  • 第一次握手:客户端向服务器发出连接请求,等待服务器确认
  • 第二次握手:服务器向客户端回送一个响应,通知客户端收到连接请求
  • 第三次握手:客户端再次向服务器发送确认信息,确认连接 完成三次握手,连接建立后,客户端和服务器可以开始数据传输,由于这种面向连接的特性。TCP 协议可以保证传输数据的安全,所以应用十分广泛,比如:文件上传、文件下载、浏览页面 三次握手示意图

四次挥手示意图

发送端 Demo

代码语言:javascript
复制
package tcp;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * TCP 发送数据步骤
 * 1.创建客户端socket对象
 * 2.获取输出流,写数据
 * 3.释放资源
 */
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        // 创建客户端socket对象
        // 创建流套接字并将其连接到指定IP地址的指定端口号
        Socket socket = new Socket(InetAddress.getByName("192.168.31.162"),9002);
        // 获取输出流,写数据
        System.out.println("input you data");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 封装输出流对象
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        String line ;
        //获取输出流,写数据;
        while ((line = br.readLine()) != null){
            // 获取输出流对象
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        // 释放资源
        socket.close();
    }
}

接收端 Demo

代码语言:javascript
复制
package tcp;

import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
/**
 * TCP 接收数据步骤
 * 1.创建服务端socket对象
 * 2.监听客户端连接,返回一个socket对象
 * 3.获取输入流,读数据,并把数据显示在控制台
 * 4.释放资源
 */
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        // 创建服务端socket对象
        ServerSocket serverSocket = new ServerSocket(9002);
        // 监听客户端连接,返回一个socket对象
        Socket socket = serverSocket.accept();
        // 获取输入流,读数据,并把数据显示在控制台
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((line = br.readLine()) != null){
            System.out.println(line);
        }
        // 释放资源
        serverSocket.close();
    }
}

run 控制台

注:启动客户端服务必须先启动服务端服务,否则会抛出异常

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHPer技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 词义百科
    • TCP 协议 (传输控制协议)
      • 四次挥手示意图
      • 发送端 Demo
      • 接收端 Demo
      • run 控制台
        • 注:启动客户端服务必须先启动服务端服务,否则会抛出异常
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档