TCP协议发送/接收数据实现[TCP/IP协议入门]

该博客介绍了如何使用Java实现TCP协议的客户端和服务器端通信。通过详细展示`ClientDemo`和`ServerDemo`两个示例,阐述了TCP连接的三次握手过程,并提供了一个简单的数据传输流程。在客户端,创建Socket对象,获取输出流并发送数据;在服务器端,创建ServerSocket,监听连接,获取输入流并读取数据。强调了启动顺序,必须先启动服务器端。
摘要由CSDN通过智能技术生成

背景

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

词义百科

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

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

三次握手示意图

在这里插入图片描述

四次挥手示意图

在这里插入图片描述

发送端 Demo

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

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 控制台

在这里插入图片描述
在这里插入图片描述

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

### 回答1: 在VB.NET中,可以使用TCP/IP协议来进行客户端的发送和接收操作。 要创建一个TCP/IP客户端,首先我们需要导入`System.Net.Sockets`命名空间,并创建一个`TcpClient`实例,这个实例可以用来与服务器进行通信。 假设我们已经知道服务器的IP地址和端口号,我们可以使用`TcpClient`实例的`Connect`方法连接到服务器。例如: ```vb Dim client As New TcpClient() client.Connect("服务器IP地址", 端口号) ``` 接下来,我们可以使用`TcpClient`实例的`GetStream`方法获得一个`NetworkStream`实例。`NetworkStream`类用于在网络发送接收数据。 ```vb Dim stream As NetworkStream = client.GetStream() ``` 现在我们可以使用`NetworkStream`实例的`Write`方法发送数据到服务器。例如,发送一个字符串: ```vb Dim data As String = "Hello, server!" Dim bytes As Byte() = Encoding.ASCII.GetBytes(data) stream.Write(bytes, 0, bytes.Length) ``` 同样,我们也可以使用`NetworkStream`实例的`Read`方法从服务器接收数据。例如,接收服务器发来的回应: ```vb Dim buffer As Byte() = New Byte(client.ReceiveBufferSize - 1) {} Dim bytesRead As Integer = stream.Read(buffer, 0, buffer.Length) Dim responseData As String = Encoding.ASCII.GetString(buffer, 0, bytesRead) ``` 最后,我们可以关闭`NetworkStream`和`TcpClient`实例,释放资源: ```vb stream.Close() client.Close() ``` 这样,我们就完成了使用VB.NET进行TCP/IP客户端的发送和接收操作。请注意,在实际应用中,可能需要处理更多的异常和错误情况,并进行适当的错误处理和重试。 ### 回答2: TCP/IP是一种广泛应用于计算机网络通信的协议。在VB.NET中,我们可以使用TcpClient类来创建一个TCP/IP的客户端,并进行发送接收数据的操作。 首先,我们需要在VB.NET项目中引入System.Net命名空间,以便使用TcpClient类。然后,我们可以通过实例化TcpClient类来创建一个TCP/IP客户端对象。 创建对象的代码如下: Dim client As New TcpClient 然后,我们可以使用TcpClient类的Connect方法来连接到服务器。Connect方法接受一个IP地址和端口号作为参数。 连接服务器的代码示例如下: client.Connect("服务器IP地址", 端口号) 连接成功后,我们就可以使用TcpClient类的GetStream方法来获取数据流。数据流提供了发送接收数据的功能。 获取数据流的代码示例如下: Dim stream As NetworkStream = client.GetStream() 发送数据非常简单,我们可以使用数据流的Write方法将数据发送到服务器。Write方法接受一个字节数组作为参数,将字节数组中的数据发送出去。 发送数据的代码示例如下: Dim data As Byte() = Encoding.ASCII.GetBytes("需要发送的数据") stream.Write(data, 0, data.Length) 接收数据也很简单,我们可以使用数据流的Read方法从服务器接收数据。Read方法接受一个字节数组作为参数,并将接收到的数据存储在字节数组中。 接收数据的代码示例如下: Dim buffer As Byte() = New Byte(1023) {} Dim bytesRead As Integer = stream.Read(buffer, 0, buffer.Length) Dim receivedData As String = Encoding.ASCII.GetString(buffer, 0, bytesRead) 最后,我们可以使用TcpClient类的Close方法关闭TCP/IP客户端连接。 关闭连接的代码示例如下: client.Close() 通过以上步骤,我们可以在VB.NET中创建一个TCP/IP客户端,并进行发送接收数据的操作。 ### 回答3: VB.NET中实现TCP/IP客户端的发送和接收可以通过使用Socket类来完成。下面是一个简单的示例: 首先,在VB.NET中引入System.Net.Sockets命名空间。 ``` Imports System.Net.Sockets ``` 然后,创建一个TcpClient对象来建立与服务器的连接。 ``` Dim client As TcpClient = New TcpClient() client.Connect("服务器IP地址", 服务器端口号) ``` 接下来,可以使用网络流来发送接收数据发送数据: ``` Dim data As String = "要发送的数据" Dim stream As NetworkStream = client.GetStream() Dim bytes As Byte() = Encoding.UTF8.GetBytes(data) stream.Write(bytes, 0, bytes.Length) ``` 接收数据: ``` Dim buffer(1024) As Byte Dim bytesRead As Integer = stream.Read(buffer, 0, buffer.Length) Dim receivedData As String = Encoding.UTF8.GetString(buffer, 0, bytesRead) ``` 最后,关闭连接。 ``` stream.Close() client.Close() ``` 这就是用VB.NET实现TCP/IP客户端的发送和接收的基本步骤。当然,在实际应用中可能需要添加一些错误处理和数据处理的逻辑,以上仅为简单示例。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值