C#专题 | TcpIp通信

本文详细介绍了使用C#构建TCP/IP通信服务端的步骤,包括创建Socket、设置Bind、Listen、Accept,以及实现连接成功后的信息交互和断开连接操作。程序逻辑清晰,包括连接按钮事件中的服务端启动和发送连接成功信息,以及断开按钮事件中的客户端关闭和定时器停止。
摘要由CSDN通过智能技术生成

1:C# - TcpIp通信总流程

在这里插入图片描述图1 服务端与服务端关系及各自的流程

2:c# 实现服务端窗体步骤

2.1 :建立并布置窗体如图2所示

在这里插入图片描述图2 窗体样式及控件名

2.2 程序讲解

2.2.1 程序逻辑

  1. 创建全局服务端Socket变量,创建服务端连接的Socket变量
  2. 在”连接”按钮的点击事件中完成以下功能:
    ①服务端的Bind、Listen、Accept;
    ②之后服务器端向客户端发送一个连接成功信息;
    ③开启服务端接收信息定时器,并将接收的信息显示在界面上;
  3. 在”断开”按钮的点击事件中完成以下功能:
    ①关闭所连接的客户端;
    ②关闭接收信息定时器
2.2.2 程序讲解
程序总览
using System;
using System.Text;
using System.Windows.Forms;
//与TCP-IP相关的命名空间
using System.Net;
using System.Net.Sockets;

namespace C_Sharp_TCPIP_Connect_text
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        #region C#实现Tcp_Ip通信-服务端
        Socket connected_KeHuDuan_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)
        {
            //1.2-对所创建服务端Socket套接字初始化
            server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //第二步Bind:2.1-创建Endoint变量,//通过获取IP地址和端口为其初始化。为调用server变量下Bind方法提供参数
            EndPoint 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对象,表明和哪一个客户端建立了
            connected_KeHuDuan_Socket = server.Accept();//等到客户端连接,当连接上时,返回所连接的客户端的Socket套接字

            #region 接下来就是实现服务端接收信息和发送信息功能
            /*可根据自己需求,在想发送的地方发送数据,在想接收信息的地方接收数据
             *通常在建立连接时就接收数据,并发送一个连接成功的数据
             */
            connected_KeHuDuan_Socket.Send(Encoding.UTF8.GetBytes("你好" + connected_KeHuDuan_Socket + ",你已成功连接到服务器"));//向所连接的客户端发送一个连接成功消息      
            //开启接收信息定时器
            tmr_receiveData.Enabled = true;
            tmr_receiveData.Start();

            #endregion
        }
        #endregion
        /// <summary>
        /// 定时接收客户端信息,并显示在桌面上
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tmr_receiveData_Tick(object sender, EventArgs e)
        {
            byte[] received_data = { };//创建一个缓存区
            //调用Receive方法接收客户端信息,该方法返回一个int值表示所接收到的字节数。
            int num = connected_KeHuDuan_Socket.Receive(received_data);//将所接收的客户端信息放到缓存区,并返回接收的字节数量
            rtb_Serverce_ReceicedData.Text += Encoding.UTF8.GetString(received_data, 0, num);//将接收到的数据显示在桌面上
        }
        /// <summary>
        /// 断开连接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Tcpip_DisConnect_Click(object sender, EventArgs e)
        {
            connected_KeHuDuan_Socket.Close();
            tmr_receiveData.Enabled = false;
            tmr_receiveData.Stop();
        }
    }
}

https://zhuanlan.zhihu.com/p/86693681

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值