socket 通信 多线程调用窗体(委托)的几个知识点,记录在案,以备查阅

1.socket 通信传输汉字的方法:Encoding.GetEncoding("GB2312").GetString(Receivebyte) 发送接收都这样转化

直接上程序

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义委托
        public delegate void ShowMessageHandel(string msg);
        //向控件添加显示信息
        public void showMsg(string msg)
        {
            listBox1.Items.Add(msg);
        }
        private void Form1_Load(object sender, EventArgs e)
        {

            //Control.CheckForIllegalCrossThreadCalls = false;
            Thread th = new Thread(new ThreadStart(ServerSocket));
            th.Start();
            // ServerSocket();
        }
        Socket client;
        public void ServerSocket()
        {
            IPEndPoint ipP = new IPEndPoint(IPAddress.Parse("192.168.1.104"), 6000);

            Socket socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socketServer.Bind(ipP);
            while (true)
            {
                socketServer.Listen(5);
                client = socketServer.Accept();

                Thread thClient = new Thread(new ThreadStart(ClientSocket));
                thClient.Start();

            }
        }
        public void ClientSocket()
        {
            ShowMessageHandel smh = showMsg;
           
            byte[] byteMsg = new byte[1024];
            while (true)
            {
                client.Receive(byteMsg, byteMsg.Length, SocketFlags.None);
                client.Send(System.Text.ASCIIEncoding.UTF8.GetBytes("你好"));
                client.Send(UTF8Encoding.GetEncoding("GB2312").GetBytes("你好"));

                // listBox1.Items.Add(Encoding .ASCII.GetString(byteMsg));

                //可收发汉字
                string strMsg = UTF8Encoding.GetEncoding("GB2312").GetString(byteMsg);
                this.BeginInvoke(smh, strMsg);//委托简单调用
            }
        }
    }

上面代码仅供参考,有肯多不足,请多指教

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云技术服务团队

C#封装v5 COS API实践-post方法

感兴趣的小伙伴们可以下载直接使用,基于C#改成java也很方便,希望可以降低大家调试API成本。

1974
来自专栏Create Sun

quartz.net插件类库封装(含源码)

1、前言    最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 ...

29111
来自专栏岑玉海

C#向excel中写入数据的三种方式

第一种:将DataGrid中的数据以流的形式写到excel中,格式以html的形式存在             Response.Clear();       ...

3174
来自专栏张善友的专栏

.NET 4 System.Threading.Barrier 类

在Visual Studio 2010 and .NET Framework 4 Training Kit中有个System.Threading.Barrier...

2379
来自专栏JadePeng的技术博客

使用Mongodb 做对象缓存

mongodb高效的访问速度,用来快速存取数据再合适不过了,缓存神马的,可以用这个的 另外,有的时候,如果仅仅存储几条数据,单独去建立一张表代价太大,这个时候,...

4815
来自专栏函数式编程语言及工具

Akka(36): Http:Client-side-Api,Client-Connections

   Akka-http的客户端Api应该是以HttpRequest操作为主轴的网上消息交换模式编程工具。我们知道:Akka-http是搭建在Akka-stre...

2579
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构

前言:  这应该是本系统最后一次重构,将重构BLL层和Model层。来完全取代代码生成器生成的BLL层和DAL层。完全废掉了代码生成器的DAL,BLL,MOD...

38510
来自专栏菩提树下的杨过

linq to xml复习

虽然linq to xml随着.net framework3.0一起发布N久了,但因为自己以前参考网上的代码封装了一个xml操作类(当时linq to xml还...

2095
来自专栏c#开发者

ado.net data services开发框架学习

ado.net data services开发框架学习 什么是ado.net data services Ado.net 数据服务可以很方便的将企业内部数据发...

2806
来自专栏along的开发之旅

Microsoft Visual Studio International Pack下载和试用

1.Simplified Chinese Pin-Yin Conversion Library(简体中文拼音转换类库)      

1123

扫码关注云+社区

领取腾讯云代金券