TCP通讯-客户端链接

news/2025/2/21 7:51:19

一、TCP客户端 效果展示

二、准备任务

 1.创建画面

2. 创建服务端,与客户端进行相连接

三、控件的分体效果

1.窗体加载

 private void Form1_Load(object sender, EventArgs e)
 {
     System.Diagnostics.Process.Start(@"D:\17_SocketTool\SocketTool.exe");
 }

 2.声明客户端和线程

public Socket clentsocket;
Thread t1;

3.ListBox 运行过程画面展示

  private void AddMsg(string msg)
  {
      listBox1.BeginInvoke(new Action<string>(str =>
      {
          listBox1.Items.Add(str);
      }), msg);
  }

4.链接服务器按钮功能

 private void btnstart_Click(object sender, EventArgs e)
 {
     btnstart.Enabled = false;
     btncancel.Enabled = true;
     clentsocket=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
     {
         clentsocket.Connect(iPEndPoint);
         AddMsg($"{DateTime.Now.ToString("HH-mm-sss")}链接成功");
         
     }
     catch (Exception ex)
     {
         AddMsg(ex.ToString() );
     }
     //接收消息
     t1 = new Thread(Received);
     t1.IsBackground = true;
     t1.Start(clentsocket);
 }
 private void Received(object o)
 {
     Socket socket=o as Socket;
     while(true)
     {
         byte[]buffer=new byte[1024*1024*2];
         int r=socket.Receive(buffer);
         if(r==0)
         {
             return;
         }
         string msg=Encoding.UTF8.GetString(buffer);
         AddMsg(msg);
     }
 }

5.断开服务器按钮功能

private void btncancel_Click(object sender, EventArgs e)
{
    btnstart.Enabled = true;
    btncancel.Enabled = false;
    if(clentsocket!=null)
    {
        clentsocket.Shutdown(SocketShutdown.Both );
        clentsocket.Close();
        t1.Abort();
    }
}

6.发送信息功能实现

  private void btnsend_Click(object sender, EventArgs e)
  {
      string msg=textBox3.Text;
      byte[]bytes=Encoding.UTF8.GetBytes(msg);
      try
      {
          clentsocket.Send(bytes);
          AddMsg("发送成功");
          textBox3.Clear();
      }catch (Exception ex)
      {
          throw;
      }
  }

全部代码

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();
        }
        public Socket clentsocket;
        Thread t1;
        private void btnstart_Click(object sender, EventArgs e)
        {
            btnstart.Enabled = false;
            btncancel.Enabled = true;
            clentsocket=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
            {
                clentsocket.Connect(iPEndPoint);
                AddMsg($"{DateTime.Now.ToString("HH-mm-sss")}链接成功");
                
            }
            catch (Exception ex)
            {
                AddMsg(ex.ToString() );
            }
            //接收消息
            t1 = new Thread(Received);
            t1.IsBackground = true;
            t1.Start(clentsocket);
        }
        private void Received(object o)
        {
            Socket socket=o as Socket;
            while(true)
            {
                byte[]buffer=new byte[1024*1024*2];
                int r=socket.Receive(buffer);
                if(r==0)
                {
                    return;
                }
                string msg=Encoding.UTF8.GetString(buffer);
                AddMsg(msg);
            }
        }

        private void btncancel_Click(object sender, EventArgs e)
        {
            btnstart.Enabled = true;
            btncancel.Enabled = false;
            if(clentsocket!=null)
            {
                clentsocket.Shutdown(SocketShutdown.Both );
                clentsocket.Close();
                t1.Abort();
            }
        }

        private void btnsend_Click(object sender, EventArgs e)
        {
            string msg=textBox3.Text;
            byte[]bytes=Encoding.UTF8.GetBytes(msg);
            try
            {
                clentsocket.Send(bytes);
                AddMsg("发送成功");
                textBox3.Clear();
            }catch (Exception ex)
            {
                throw;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(@"D:\17_SocketTool\SocketTool.exe");
        }
        private void AddMsg(string msg)
        {
            listBox1.BeginInvoke(new Action<string>(str =>
            {
                listBox1.Items.Add(str);
            }), msg);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (clentsocket != null)
            {
                clentsocket.Shutdown(SocketShutdown.Both);
                clentsocket.Close();
                t1.Abort();
            }
        }
    }
}

四、服务端和客户端的区别

在这里我可能给大家讲的不是很全面,你们则其善者而从之就可以了。

  • 服务端就相当于一个大型网络设备, 电脑需要去联网, 同样网络只有被链接了才能被体会他的重要性。
  • 服务端和客户端是相互的,要想他们两个构成链接,肯定需要网口ip和端口数据
  • 就像你跟你朋友打电话一样,辅助的工具就是手机

客户端只有和服务端链接之后,他们的对话才算有效。

注意:  服务端的链接是   Bind,  客户端是 Connect


http://www.niftyadmin.cn/n/5858139.html

相关文章

MySQL数据库(3)—— 表操作

目录 一&#xff0c;创建表 1.1 创建表的SQL 1.2 演示 二&#xff0c;查看表 三&#xff0c;修改表 四&#xff0c;删除表 常用的表操作会涉及到两种SWL语句 DDL&#xff08;Data Definition Language&#xff09;数据定义语言&#xff1a;建表、改表、删表等&#xff0…

上位机知识篇---与、或、移位操作(、|、>><<)

文章目录 前言第一部分&#xff1a;与操作&#xff08;&&#xff09;简介语法示例在代码中的应用1.提取某一位2.屏蔽某些位&#xff08;清零&#xff09;3.判断某一位是否为 1 在 DS18B20 和 AT24C02 代码中的应用1.DS18B20 代码2.AT24C02 代码 第二部分&#xff1a;移位操…

STM32 定时器产生定周期方法

目录 背景 程序 第一步、使能PCLK1外设时钟​编辑 第二步、时基单元配置 第三步、配置NVIC&#xff08;设置定时中断优先级&#xff09;​编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数&#xff08;ISR&#xff09; 背景 在单片机开发当中&…

[AI相关]Unity的C#代码如何简写

是一个某培训机构的飞行棋教学源码 不知道&#xff0c;是否有人想知道怎么可以简写 &#xff08;这个问AI&#xff0c;DeepSeek也应该找不到答案的&#xff09; 静态变量 属性引用 单例 注入 一些UnityEvent特性就不说了。。。 IL 注入 运算符号改写

Linux第一章 环境搭建

文章目录 环境搭建安装wsl安装GUI可视化界面 常用命令基础常识命令解析器查看shell操作系统结构目录结构主要目录介绍 路径结构绝对路径相对路径 命令提示符文件属性 包管理命令sudo apt-get 文件和目录操作treelscdpwdwhichtouchmkdirrmdirrmcpmvcatmorestatlnwcwhoami 用户权…

STM32的HAL库开发---单通道ADC采集实验

一、实验简要 1、功能描述 通过ADC1通道1&#xff08;PA1&#xff09;采集电位器的电压&#xff0c;并显示ADC转换的数字量及换算后的电压值 2、确定最小刻度 VREF 3.3V ---》 0V ≤ VIN ≤ 3.3V ---》最小刻度 3.3 / 4096 &#xff0c;F1的分辨率是12位的&#xff0c;也…

cmake:定位Qt的ui文件

如题。在工程中&#xff0c;将h&#xff0c;cpp&#xff0c;ui文件放置到不同文件夹下&#xff0c;会存在cmake找不到ui文件&#xff0c;导致编译报错情况。 cmake通过指定文件路径&#xff0c;确保工程找到ui文件。 标识1&#xff1a;ui文件保存路径。 标识2&#xff1a;添加…

网站搭建基本流程

需求分析&#xff1a; 实现网站搭建的过程&#xff1a;首先进行网站的需求性分析 网站可分为前台系统和后台系统&#xff0c;由不同的功能拆分为不同的模块 如下是一个电商网站可以拆分出的模块&#xff1a; 在编写代码前&#xff0c;我们要先对网站进行架构&#xff0c;通过…