c# tcpip 通信 Task线程接收信息

本文介绍了如何使用C#通过线程解决TCP/IP通信中界面卡死的问题。服务端和客户端分别创建Socket,利用线程进行数据接收和发送,避免了定时器导致的界面不响应。同时,展示了服务端和客户端的代码实现,包括连接、断开、接收和发送数据的逻辑。并提到了线程管理和异常处理,以及解决Tasks命名空间引用错误的方法。

1 c# tcpip通信-用线程实现数据接收与发送

针对用定时器实现数据接收过程出现的界面卡死现象,本次采用线程进行数据接收过程。服务端和客户端如图1所示。
在这里插入图片描述图1 服务端和客户端

2 程序讲解

c# 实现服务端程序
using System;
using System.Text;
using System.Windows.Forms;
//与TCP-IP相关的命名空间
using System.Net;
using System.Net.Sockets;
//与线程相关的命名空间
using System.Threading;
using System.Threading.Tasks;

namespace C_Sharp_TCPIP_Connect_text
{
   
   
    public partial class Frm_Serviers : Form
    {
   
   
        public Frm_Serviers()
        {
   
   
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }
        EndPoint endpoint;//建立一个Endpoint类型变量
        private CancellationTokenSource cts1;//建立一个线程管理变量,该值默认为false
        byte[] received_data = new byte[1024];//创建一个缓存区
        #region C#实现Tcp_Ip通信-服务端
        Socket acceptted_Socket;//创建一个Socket变量,用来存放服务端所连接的客户端的Socket
        //第一步Socket:1.1-创建服务端Socket套接字
        Socket server;//该套接字在全局中创建,在要连接时给初始化
        /// <summary>
        /// 服务端启动TCP-IP连接功能
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_TcpIp_Connect_Click(object sender, EventArgs e)
        {
   
               
            try
            {
   
   
                //1.2-对所创建服务端Socket套接字初始化
                server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //第二步Bind:2.1-创建Endoint变量,//通过获取IP地址和端口为其初始化。为调用server变量下Bind方法提供参数
                endpoint = new IPEndPoint(IPAddress.Parse(txt_IP.Text.Trim()), int.Parse(txt_Port.Text.Trim()));//获取IP与端口
                //2.2-服务端调用Bind方法,执行绑定
                server.Bind(endpoint);
                //第三步Listen:3.1-调用server变量下Listen方法
                server.Listen(10);//参数是监听客户的的个数。如有11各客户的连接到服务端,那么只有前10各能连接上
                //第四步Accept:4.1-调用server变量下Accept方法,该方法会返回一个Socet对象,表明和哪一个客户端建立了
                acceptted_Socket = server.Accept();//等到客户端连接,当连接上时,返回所连接的客户端的Socket套接字
                #region 接下来就是实现服务端接收信息和发送信息功能
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值