通信:Winform(结合C#) TCP服务端

一、TCP通讯(服务端)

二、控件展示

三、TCP 服务端 客户端 分辨

四、控件解析

一般IP地址本机都是 : 127.0.0.1

端口号会有显示: 60000

服务端: 启动监听 停止监听 都会有发送信息

服务端对接的是客户端 可以理解为是理解

控件:ListBox 是为了更好展示运行的过程

五、链接控件实施

1.实例化三个Socket

cs 复制代码
 public Socket ServerSocket {  get; set; }
 public Socket SocketAccept { get; set; }
 public Socket socket;

ServerSocket 是用来套接字 用来监听的套子节

SocketAccept 是用来接收绑定客户端的套接字

2.过程运行结果,展示

cs 复制代码
 private void Showmsg(string s)
 {
     listBox1.BeginInvoke(new Action<string>(str =>
     {
         listBox1.Items.Add(str);
     }), s);
 }

注意: 由于在线程中,分线程不能操作ui界面,所以需要用Invoke来调用

或者: CheckForIllegalCrossThreadCalls=false; 对非法线程调用不进行检测

3.线程,开始监听事件

cs 复制代码
  Thread t1;
  Thread t2;

4.按钮一:启动监听实施

cs 复制代码
 private void btnstart_Click(object sender, EventArgs e)
 {
     btnstart.Enabled=false;
     btncancel.Enabled=true;
     ServerSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
    //绑定ip地址
     IPAddress iPAddress=IPAddress.Parse(textBox1.Text);
    //绑定端口号
     int port=int.Parse(textBox2.Text);
    //建立连接
     IPEndPoint iPEndPoint=new IPEndPoint(iPAddress, port);

     try
     {
         //绑定连接点
         ServerSocket.Bind(iPEndPoint);
         //开始监听
         ServerSocket.Listen(5);
         t1 = new Thread(ListenT1);
         t1.IsBackground=true;
         t1.Start(ServerSocket);
     }
     catch (Exception ex)
     {
         throw;
     }

 }
 private void ListenT1(object o)
 {
     SocketAccept = o as Socket;
     try
     {
         while(true)
         {       
            //线程阻塞,直到有客户连接,再去执行后续代码
             socket = SocketAccept.Accept();
             Showmasg($"{DateTime.Now.ToString("HH-mm-ss")}{socket.RemoteEndPoint}连接成功");
             t2 = new Thread(Received);
             t2.IsBackground=true;
             t2.Start(socket);
         }
     }catch (Exception ex)
     {
         throw;
     }
 }
 private void Received(object o)
 {
     socket=o as Socket;
      //传递的数据大小为2M
     byte[]buffer=new byte[1024*1024*2];
     int r=socket.Receive(buffer);
     if (r==0)
     {
         return;
     }
     string s=Encoding.UTF8.GetString(buffer);
     Showmasg(s);
 }

代码解释:

实例化一个Socket

参数1:设置协议的类型 参数2:套接字的双向数据流 参数3:使用tcp通信协议

5.停止监听按钮

cs 复制代码
 private void btncancel_Click(object sender, EventArgs e)
 {
     btncancel.Enabled = false;
     if (socket != null)
     {
         socket.Shutdown(SocketShutdown.Both);
         socket.Close();
     }
     ServerSocket.Close();
     t1.Abort();
     btnstart.Enabled = true;
 }

6.发送信息效果展示

cs 复制代码
 private void btnsend_Click(object sender, EventArgs e)
 {
    string s=textBox3.Text;
     byte[]buffer=Encoding.UTF8.GetBytes(s);
     try
     {
         int r = socket.Send(buffer);
         Showmasg("发送成功");
         textBox3.Clear();
     }
     catch (Exception ex)
     {
         throw;
     }
 }

六、清目了然的CV吧

cs 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TCP服务器
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //创建Socket
        public Socket ServerSocket {  get; set; }
        public Socket SocketAccept { get; set; }
        public Socket socket;

        private void Showmasg(string s)
        {
            listBox1.BeginInvoke(new Action<string>(str =>
            {
                listBox1.Items.Add(str);
            }), s);
        }
        Thread t1;
        Thread t2;

        private void btnstart_Click(object sender, EventArgs e)
        {
            btnstart.Enabled=false;
            btncancel.Enabled=true;
            ServerSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
            IPAddress iPAddress=IPAddress.Parse(textBox1.Text);
            int port=int.Parse(textBox2.Text);
            IPEndPoint iPEndPoint=new IPEndPoint(iPAddress, port);

            try
            {
                ServerSocket.Bind(iPEndPoint);
                ServerSocket.Listen(5);
                t1 = new Thread(ListenT1);
                t1.IsBackground=true;
                t1.Start(ServerSocket);
            }
            catch (Exception ex)
            {
                throw;
            }

        }
        private void ListenT1(object o)
        {
            SocketAccept = o as Socket;
            try
            {
                while(true)
                {
                    socket = SocketAccept.Accept();
                    Showmasg($"{DateTime.Now.ToString("HH-mm-ss")}{socket.RemoteEndPoint}连接成功");
                    t2 = new Thread(Received);
                    t2.IsBackground=true;
                    t2.Start(socket);
                }
            }catch (Exception ex)
            {
                throw;
            }
        }
        private void Received(object o)
        {
            socket=o as Socket;
            byte[]buffer=new byte[1024*1024*2];
            int r=socket.Receive(buffer);
            if (r==0)
            {
                return;
            }
            string s=Encoding.UTF8.GetString(buffer);
            Showmasg(s);
        }
        private void btncancel_Click(object sender, EventArgs e)
        {
            btncancel.Enabled = false;
            if (socket != null)
            {
                socket.Shutdown(SocketShutdown.Both);
                socket.Close();
            }
            ServerSocket.Close();
            t1.Abort();
            btnstart.Enabled = true;
        }

        private void btnsend_Click(object sender, EventArgs e)
        {
           string s=textBox3.Text;
            byte[]buffer=Encoding.UTF8.GetBytes(s);
            try
            {
                int r = socket.Send(buffer);
                Showmasg("发送成功");
                textBox3.Clear();
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(@"D:\17_SocketTool\SocketTool.exe");
        }
    }
}
相关推荐
网安小白的进阶之路2 小时前
A模块 系统与网络安全 第四门课 弹性交换网络-2
网络·安全·web安全·系统安全·交换机
安全系统学习2 小时前
网络安全之RCE分析与利用详情
服务器·网络·安全·web安全·系统安全
武汉唯众智创2 小时前
网络安全实训室建设方案全攻略
网络·安全·web安全·网络安全·网络安全实训室·网络安全实验室
啟明起鸣3 小时前
【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
c语言·网络·tcp/ip·p2p
追烽少年x3 小时前
设计模式---观察者模式(发布-订阅模式)
网络·设计模式
宝山哥哥5 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
专注VB编程开发20年6 小时前
常见 HTTP 方法的成功状态码200,204,202,201
开发语言·网络协议·tcp/ip·http
Dsocc6 小时前
TCP 动态选路协议全面研究:OSPF、BGP 与 IS-IS 的比较与应用分析
网络·网络协议·tcp/ip
YC运维6 小时前
RIP实验以及核心原理
运维·网络·智能路由器
阿蒙Amon7 小时前
C#随机数生成全面详解:从基础到高级应用
服务器·网络·c#