使用C#设计一个Tcp客户端

  前言      

        本章文章是使用C#设计一个简单的Tcp客户端,TCP客户端是指通过TCP(传输控制协议)进行通信的一方。在TCP通信中,通常有两个主要组件:客户端和服务器。TCP客户端是发起通信的一端,它通过与服务器建立连接来发送和接收数据。

Tcp客户端的主要功能

        建立连接:TCP客户端需要与TCP服务器建立连接才能进行数据传输。这个连接过程是通过三次握手来完成的,确保连接的可靠性和安全性。

        发送数据:一旦连接建立成功,TCP客户端就可以向服务器发送数据。TCP协议保证数据的可靠传输,通过确认和重传机制确保数据不会丢失或损坏。

        接收数据:TCP客户端也可以接收来自服务器的数据。当服务器发送数据时,客户端会按照数据的发送顺序进行接收,并通过确认机制告知服务器数据已成功接收。

        关闭数据:当数据传输完成后,TCP客户端会发送一个关闭连接的请求给服务器,服务器收到请求后会回复一个确认消息,然后双方都会关闭连接。这个过程称为四次挥手。

TCP客户端的主要特点包括:

        面向连接:TCP客户端在发送数据之前需要与服务器建立连接。这个连接过程通常涉及三次握手,确保双方都准备好进行通信。
可靠传输:TCP客户端使用确认和重传机制来确保数据的完整性和顺序。即使在网络条件不稳定的情况下,TCP也能保证数据的可靠传输。
字节流传输:TCP将数据视为一个连续的字节流,而不是单独的数据包。这使得TCP能够处理数据的碎片化和重排序。
        端口标识:TCP客户端通过源端口和目的端口号来标识数据的来源和目的地。这使得多个应用程序能够在同一台设备上同时进行网络通信。

一、创建项目

        使用C#创建一个窗体应用。

 对项目进行命名

二、设计窗体

在工具箱找到textBox和button布置内容。

三、程序代码

1、连接服务器

代码中(10.92.206.225)是Tcp服务器地址。

 private void buttonConnect_Click(object sender, EventArgs e)
 {
     tcpClient = new TcpClient();
     tcpClient.Connect(IPAddress.Parse("10.92.206.225"), 3400);
     stream = tcpClient.GetStream();
     new Task(() => MyReceiveData(tcpClient)).Start();
 }

2、发送数据

代码如下:

 private void buttonSend_Click(object sender, EventArgs e)
 {
     String str = this.textBoxSend .Text;
     byte[] data = Encoding.Default.GetBytes(str);
     stream.Write(data, 0, data.Length);
 }

3、为Tcp网络服务器提供连接

 private void MyReceiveData(TcpClient tcpClient)
 {
     byte[] data = new byte[1024];
     while (true)
     {
         int count = stream.Read(data, 0, 1024);
         String str = Encoding.Default.GetString(data, 0, count);
         this.Invoke(new Action(() =>
         {
             this.textBoxReceive .Text += str + "\r\n";
         }));
     }

 }

4、整体代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Tcp客户端
{
    public partial class Form1 : Form
    {
        private TcpClient tcpClient;
        private NetworkStream stream;
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonConnect_Click(object sender, EventArgs e)
        {
            tcpClient = new TcpClient();
            tcpClient.Connect(IPAddress.Parse("10.92.206.225"), 3400);
            stream = tcpClient.GetStream();
            new Task(() => MyReceiveData(tcpClient)).Start();
        }

        private void MyReceiveData(TcpClient tcpClient)
        {
            byte[] data = new byte[1024];
            while (true)
            {
                int count = stream.Read(data, 0, 1024);
                String str = Encoding.Default.GetString(data, 0, count);
                this.Invoke(new Action(() =>
                {
                    this.textBoxReceive .Text += str + "\r\n";
                }));
            }

        }

        private void buttonSend_Click(object sender, EventArgs e)
        {
            String str = this.textBoxSend .Text;
            byte[] data = Encoding.Default.GetBytes(str);
            stream.Write(data, 0, data.Length);
        }

       
    }
}

四、工程架构

五、总结

1、服务器首先调用系统API创建一个套接字,指定使用IPv4或IPv6,以及TCP协议。

2、当有客户端连接请求到来时,服务器从监听队列中取出一个连接请求,并为该请求创建一个新的套接字(通常称为“已连接套接字”或“客户端套接字”),与客户端进行通信。原始套接字(即监听套接字)则继续监听其他连接请求。

3、客户端使用套接字尝试连接到服务器的IP地址和端口号。TCP协议会进行三次握手来建立连接。

4、数据传输完成后,客户端调用系统API关闭与服务器的连接,释放相关资源。

5、注意事项:

三次握手:TCP协议使用三次握手来建立连接,确保双方都已准备好进行数据传输。

四次握手:TCP协议使用四次挥手来关闭连接,确保双方都已收到对方的关闭请求,并释放相关资源。

阻塞与非阻塞:套接字可以设置为阻塞模式或非阻塞模式。在阻塞模式下,如果当前操作不能立即完成(如没有数据可读或缓冲区已满),则调用线程会被挂起,直到操作完成。而在非阻塞模式下,即使当前操作不能立即完成,调用线程也会立即返回。

错误处理:在TCP通信过程中,可能会遇到各种错误情况,如连接失败、数据丢失等。因此,在编写TCP客户端和服务器程序时,需要妥善处理这些错误情况,确保程序的稳定性和可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值