IT评测·应用市场-qidao123.com

标题: 通信:Winform(联合C#) TCP服务端 [打印本页]

作者: 罪恶克星    时间: 2025-2-19 13:47
标题: 通信:Winform(联合C#) TCP服务端
 一、TCP通讯(服务端)


二、控件展示



 三、TCP 服务端 客户端 分辨


四、控件剖析

一般IP地点本机都是 :  127.0.0.1

端口号会有表现:   60000

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

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

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

五、链接控件实验

1.实例化三个Socket

  1. public Socket ServerSocket {  get; set; }
  2. public Socket SocketAccept { get; set; }
  3. public Socket socket;
复制代码
 ServerSocket  是用来套接字   用来监听的套子节

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

2.过程运行结果,展示

  1. private void Showmsg(string s)
  2. {
  3.      listBox1.BeginInvoke(new Action<string>(str =>
  4.      {
  5.          listBox1.Items.Add(str);
  6.      }), s);
  7. }
复制代码
注意: 由于在线程中,分线程不能操作ui界面,所以需要用Invoke来调用

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

3.线程,开始监听事故

  1.   Thread t1;
  2.   Thread t2;
复制代码
4.按钮一:启动监听实验

  1. private void btnstart_Click(object sender, EventArgs e)
  2. {
  3.      btnstart.Enabled=false;
  4.      btncancel.Enabled=true;
  5.      ServerSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
  6.     //绑定ip地址
  7.      IPAddress iPAddress=IPAddress.Parse(textBox1.Text);
  8.     //绑定端口号
  9.      int port=int.Parse(textBox2.Text);
  10.     //建立连接
  11.      IPEndPoint iPEndPoint=new IPEndPoint(iPAddress, port);
  12.      try
  13.      {
  14.          //绑定连接点
  15.          ServerSocket.Bind(iPEndPoint);
  16.          //开始监听
  17.          ServerSocket.Listen(5);
  18.          t1 = new Thread(ListenT1);
  19.          t1.IsBackground=true;
  20.          t1.Start(ServerSocket);
  21.      }
  22.      catch (Exception ex)
  23.      {
  24.          throw;
  25.      }
  26. }
  27. private void ListenT1(object o)
  28. {
  29.      SocketAccept = o as Socket;
  30.      try
  31.      {
  32.          while(true)
  33.          {      
  34.             //线程阻塞,直到有客户连接,再去执行后续代码
  35.              socket = SocketAccept.Accept();
  36.              Showmasg($"{DateTime.Now.ToString("HH-mm-ss")}{socket.RemoteEndPoint}连接成功");
  37.              t2 = new Thread(Received);
  38.              t2.IsBackground=true;
  39.              t2.Start(socket);
  40.          }
  41.      }catch (Exception ex)
  42.      {
  43.          throw;
  44.      }
  45. }
  46. private void Received(object o)
  47. {
  48.      socket=o as Socket;
  49.       //传递的数据大小为2M
  50.      byte[]buffer=new byte[1024*1024*2];
  51.      int r=socket.Receive(buffer);
  52.      if (r==0)
  53.      {
  54.          return;
  55.      }
  56.      string s=Encoding.UTF8.GetString(buffer);
  57.      Showmasg(s);
  58. }
复制代码
代码表明:

实例化一个Socket

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

5.停止监听按钮

  1. private void btncancel_Click(object sender, EventArgs e)
  2. {
  3.      btncancel.Enabled = false;
  4.      if (socket != null)
  5.      {
  6.          socket.Shutdown(SocketShutdown.Both);
  7.          socket.Close();
  8.      }
  9.      ServerSocket.Close();
  10.      t1.Abort();
  11.      btnstart.Enabled = true;
  12. }
复制代码
6.发送信息结果展示

  1. private void btnsend_Click(object sender, EventArgs e)
  2. {
  3.     string s=textBox3.Text;
  4.      byte[]buffer=Encoding.UTF8.GetBytes(s);
  5.      try
  6.      {
  7.          int r = socket.Send(buffer);
  8.          Showmasg("发送成功");
  9.          textBox3.Clear();
  10.      }
  11.      catch (Exception ex)
  12.      {
  13.          throw;
  14.      }
  15. }
复制代码
六、清目了然的CV吧

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Net.Sockets;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. namespace TCP服务器
  14. {
  15.     public partial class Form1 : Form
  16.     {
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }
  21.         //创建Socket
  22.         public Socket ServerSocket {  get; set; }
  23.         public Socket SocketAccept { get; set; }
  24.         public Socket socket;
  25.         private void Showmasg(string s)
  26.         {
  27.             listBox1.BeginInvoke(new Action<string>(str =>
  28.             {
  29.                 listBox1.Items.Add(str);
  30.             }), s);
  31.         }
  32.         Thread t1;
  33.         Thread t2;
  34.         private void btnstart_Click(object sender, EventArgs e)
  35.         {
  36.             btnstart.Enabled=false;
  37.             btncancel.Enabled=true;
  38.             ServerSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
  39.             IPAddress iPAddress=IPAddress.Parse(textBox1.Text);
  40.             int port=int.Parse(textBox2.Text);
  41.             IPEndPoint iPEndPoint=new IPEndPoint(iPAddress, port);
  42.             try
  43.             {
  44.                 ServerSocket.Bind(iPEndPoint);
  45.                 ServerSocket.Listen(5);
  46.                 t1 = new Thread(ListenT1);
  47.                 t1.IsBackground=true;
  48.                 t1.Start(ServerSocket);
  49.             }
  50.             catch (Exception ex)
  51.             {
  52.                 throw;
  53.             }
  54.         }
  55.         private void ListenT1(object o)
  56.         {
  57.             SocketAccept = o as Socket;
  58.             try
  59.             {
  60.                 while(true)
  61.                 {
  62.                     socket = SocketAccept.Accept();
  63.                     Showmasg($"{DateTime.Now.ToString("HH-mm-ss")}{socket.RemoteEndPoint}连接成功");
  64.                     t2 = new Thread(Received);
  65.                     t2.IsBackground=true;
  66.                     t2.Start(socket);
  67.                 }
  68.             }catch (Exception ex)
  69.             {
  70.                 throw;
  71.             }
  72.         }
  73.         private void Received(object o)
  74.         {
  75.             socket=o as Socket;
  76.             byte[]buffer=new byte[1024*1024*2];
  77.             int r=socket.Receive(buffer);
  78.             if (r==0)
  79.             {
  80.                 return;
  81.             }
  82.             string s=Encoding.UTF8.GetString(buffer);
  83.             Showmasg(s);
  84.         }
  85.         private void btncancel_Click(object sender, EventArgs e)
  86.         {
  87.             btncancel.Enabled = false;
  88.             if (socket != null)
  89.             {
  90.                 socket.Shutdown(SocketShutdown.Both);
  91.                 socket.Close();
  92.             }
  93.             ServerSocket.Close();
  94.             t1.Abort();
  95.             btnstart.Enabled = true;
  96.         }
  97.         private void btnsend_Click(object sender, EventArgs e)
  98.         {
  99.            string s=textBox3.Text;
  100.             byte[]buffer=Encoding.UTF8.GetBytes(s);
  101.             try
  102.             {
  103.                 int r = socket.Send(buffer);
  104.                 Showmasg("发送成功");
  105.                 textBox3.Clear();
  106.             }
  107.             catch (Exception ex)
  108.             {
  109.                 throw;
  110.             }
  111.         }
  112.         private void Form1_Load(object sender, EventArgs e)
  113.         {
  114.             System.Diagnostics.Process.Start(@"D:\17_SocketTool\SocketTool.exe");
  115.         }
  116.     }
  117. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4