c# 之网络通信 TCP通信 新手

编译软件:VS 2017 版

硬件平台:wind10 专业版

思路就是: 大家用过网络调试助手的都知道 ,TCP就是在同一局域网内,分为主从设备,需要设置ip地址和端口号。

                     UDP 只要一种,设置IP就好了 !
作者:misslxy 
来源:CSDN 

话不多说,先看演示图:TCP   Server 

 

 

TCP  Client   效果图  如下 :

 

TCP协议是一个基本的网络协议  ,上面两个IP 地址是自动获取的本机IP  。

下面我们来看看代码 :

TCP   Server  

 public partial class Form1 : Form
    {
        private IPAddress serverIP;
        private IPEndPoint serverFullAddr;
        private Socket sock;
        private Socket newSocket;
        Thread myThread = null;
        public Form1()
        {
            InitializeComponent();
            //获取本机IP
            tbxIP.Text = System.Net.Dns.Resolve(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
        private void btnStart_Click(object sender, EventArgs e)                     //开始
        {
            btnStart.Enabled = false;
            btnStop.Enabled = true;
            label3.Text = "建立成功";
            myThread = new Thread(new ThreadStart(BeginListen));
            myThread.Start();
            
        }

******************************获取IP 地址与开始按钮*************************************************

 private void BeginListen()                                    //监听
        {
            serverIP = IPAddress.Parse(this.tbxIP.Text);
            serverFullAddr = new IPEndPoint(serverIP, int.Parse(tbxPort.Text));//设置IP,端口
            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Bind(serverFullAddr);
            sock.Listen(3);
            newSocket = sock.Accept();
            //sock.Connect(new IPEndPoint(serverIP, int.Parse(tbxPort.Text)));

            byte[] message = new byte[1024];                    //数据大小
            string mess = "";
            while (true)
            {
                try
                {
                    //在接收数据之前 判断一下 SOCKET 连接是否断开
                    if (newSocket.Poll(10,SelectMode.SelectRead))  //如果没有数据过来就跳出循环
                    {
                       
                        newSocket.Close();
                        sock.Close();
                        myThread.Abort();
                        btnStart.Enabled = true;
                        btnStop.Enabled = false;
                       //myThread.Join();
                        break; 
                    }
                    int bytes = newSocket.Receive(message);
                    mess = Encoding.Default.GetString(message, 0, bytes);      //转换成字符串
                    Invoke(new PrintRecvMssgDelegate(PrintRecvMssg), new object[] { mess });
                }
                catch (Exception ee)
                {
                    Invoke(new PrintRecvMssgDelegate(PrintRecvMssg1), new object[] { "建立连接出错" + ee });
                }
            }
        }

 

*************************************信号的监听****************************************************

  private delegate void PrintRecvMssgDelegate(string s);
        private void PrintRecvMssg(string info)
        {
           // RTXT.Text += string.Format("{0}\r\n", info);
            RTXT.Text += string.Format("{0}", info);
        }
        private void PrintRecvMssg1(string info)
        {
            label3.Text = string.Format("{0}\r\n", info);
        }


        private void btnSend_Click(object sender, EventArgs e)
        {
            btnSend.Enabled = false;
            newSocket.Send(Encoding.Default.GetBytes(this.STXT.Text));
            btnSend.Enabled = true;
        }
        private void btnCLR_Click(object sender, EventArgs e)
        {
            RTXT.Text = "";
        }
        private void btnCLR2_Click(object sender, EventArgs e)
        {
            STXT.Text = "";
        }

        private void errgroup_Enter(object sender, EventArgs e)
        {

        }

        private void CloseForm(object sender, FormClosedEventArgs e)
        {
            System.Diagnostics.Process.GetCurrentProcess().Kill(); //关闭窗口后关闭后台进程
        }

/*********************************************数据的处理 *********************************************************************/  

下面我们看一下  TCP   Client  代码


        public Form1()
        {
            InitializeComponent();
            btnClose.Enabled = false;
            tbxIP.Text = System.Net.Dns.Resolve(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();   //自动获取本机IP
        }
        private void btnConn_Click(object sender, EventArgs e)
        {
            
            serverIP = IPAddress.Parse(tbxIP.Text);
            try
            {
                serverFullAddr = new IPEndPoint(serverIP, int.Parse(tbxPort.Text));//设置IP,端口
                sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Connect(serverFullAddr);
                btnConn.Enabled = false;
                lblError.Text = "连接成功";
                btnClose.Enabled = true;

                myThread = new Thread(new ThreadStart(Listen));
                myThread.Start();
            }
            catch (Exception ee)
            {
                lblError.Text = "连接失败"+ ee;
            }
        }

*********************************************获取IP  建立连接******************************************************

 private void btnSend_Click(object sender, EventArgs e)
        {
            byte[] byteSend = System.Text.Encoding.Default.GetBytes(this.tbxMessage.Text);
            try
            {
                sock.Send(byteSend);
            }
            catch (Exception ex)
            {
                lblError.Text = "发送错误"+ex;
            }
        }
      
        private void Listen()
        {
            byte[] message = new byte[1024];
            string mess = "";
            while (true)
            {
                int bytes = sock.Receive(message);
                mess = Encoding.Default.GetString(message, 0, bytes);
                Invoke(new PrintRecvMssgDelegate(PrintRecvMssg), new object[] { mess });
            }
        }
        private delegate void PrintRecvMssgDelegate(string s);
        private void PrintRecvMssg(string info)
        {
            reciveTxt.Text += string.Format("{0}\r\n",info);
        }

        private void btnCLR2_Click(object sender, EventArgs e)
        {
            reciveTxt.Text = "";
        }
        private void btnCLR_Click(object sender, EventArgs e)
        {
            tbxMessage.Text = "";
        }

        private void CloseForm(object sender, FormClosedEventArgs e)
        {
            System.Diagnostics.Process.GetCurrentProcess().Kill(); //关闭窗口后关闭后台进程
        }

*****************************************************发送 接收  监听 数据*******************************************************

如果大家觉得有帮助就添加关注 ,有写的不好之处多多谅解。

TCP通信源码   私信!!!!!!!!!!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值