当前位置: 首页 > article >正文

TCP通讯-客户端链接

一、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.kler.cn/a/552570.html

相关文章:

  • mysql 学习16 视图,存储过程,存储函数,触发器
  • MySQL中的事务隔离级别有哪些?
  • 【嵌入式Linux应用开发基础】进程实战开发
  • WPF创建自定义类和控件及打包成dll引用
  • 深入解析 Flutter 性能优化:从原理到实践
  • torchsparse安装过程的问题
  • Dify平台搭建面试机器人
  • Spring Boot 自动装配机制原理详解
  • 28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示
  • CubeMX配置STM32L071KZT6
  • Ubuntu 22.04完整安装Xinference及解决依赖报错
  • LLM论文笔记 11: Exploring Length Generalization in Large Language Models
  • 14. Docker 轻量级可视化工具 Portainer(的详细安装步骤+常规使用详细说明)
  • MATLAB图像处理:Sobel、Roberts、Canny等边缘检测算子
  • Ubuntu下安装cargo和uv(其实直接可以pip安装uv)
  • Django 5 实用指南(一)安装与配置
  • Qt常用控件之单选按钮QRadioButton
  • 整合Salesmart/WhatsApp、开源Odoo模块和Deepseek AI能力,实现针对国外客户的智能客服和个性化推荐服务
  • 音频采集(VUE3+JAVA)
  • 对称加密算法——IDEA加密算法