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);//委托简单调用
            }
        }
    }

 

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

 

时间: 2024-09-17 06:12:53

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

Java Web项目中使用Socket通信多线程、长连接的方法_java

很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

多线程调用窗体控件的问题!!!

问题描述 WinForm的程序在窗体的start按钮中有以下代码{.......Threadt1=newThread(newThreadStart(ThreadEntry));t1.Start();}ThreadEntry方法如下privatevoidThreadEntry(){this.BeginInvoke(newmyDelegate(InvokeListView));}InvokeListView方法如下privatevoidInvokeListView(){一些对listview控件的操

c# winform 多线程调用信息窗体

问题描述 c# winform 多线程调用信息窗体 想做一个多线程任务中的信息提示窗体.即在执行任务的过程中,如果一个线程需要向外界输出信息,那么就显示该信息窗体,并在窗体上显示信息内容,可以点击一个按钮关闭该窗体.如果其中一个线程调用了该窗体显示信息后没有关闭,其他线程调用该窗体时,则在原信息窗体上补充显示新的信息. 请各位大虾出手相助! 解决方案 可以使用自定义消息,多线程只向消息队列提交消息,信息窗体根据消息来处理显示问题

关于socket通信,多线程发送消息

问题描述 关于socket通信,多线程发送消息 最近在多线程中使用socket通信遇到的问题,场景是有多个线程需要用到同一个socket连接进行消息的发送,因为没有订具体的协议,所以对于发送(文本)消息,每次发送端发送1K字节,接收端每次接收1K字节,无效数据用0填充,正常情况下来说都没什么问题,但当接收方接收不过来时,由于发送方设置了发送超时(30ms),send会发出EWOULDBLOCK,这下问题来了,推消息设计时设置超时就是希望对方不收就扔掉, 那么如果收到EWOULDBLOCK 就返回

Windows下php socket通信怎么实现多线程操作?

问题描述 Windows下php socket通信怎么实现多线程操作? php socket通信,我想实现多个客户端可以独立连接,接受发送数据,不知道怎么实现,是在Windows下的, 解决方案 创建线程池,每一个链接都对应一个线程

java-JAVA多线程Socket通信时遇到的问题???

问题描述 JAVA多线程Socket通信时遇到的问题??? 实验过程中,服务器和客户端都能连接上了,但是服务器就是收不到客户端发来的字符串. 再贴一下代码: //Mult.java package t14_chapter; import java.io.*; import java.net.*; class Mult extends Thread{ private Socket socket; private BufferedReader in; private PrintWriter out;

c# 4 0-关于C#多线程调用的问题

问题描述 关于C#多线程调用的问题 我的窗体是MDI多文档窗体,我在主窗体顶部天界了菜单,点击菜单弹出子窗体,但是因为我要用到数据库,所以我想在点击窗体这块使用线程,但是提示错误说线程间操作无效: 从不是创建控件"MainWindow"的线程访问它.,我看到论坛中说用到委托,可是我还不会,请教大神. private void OpenTrainScheduleInquiryWindow() //线程用到的函数 { if (trainScheduleInquiry == null ||

socket通信inputStream.read(byte)读取速度小于接收速度,导致多帧数据叠加在一起。

问题描述 在socket通信中,由于inputStream.read(byte)是尽可能的读byte[]大小的数据,当服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文.而这些发送数据,读取数据的速度是未知的.怎么解决这个问题,服务器端不能改变, 解决方案 解决方案二:想办法将读取的后续动作的耗时降低.比如读取动作只负责读取,读取的内容传给多线程进行处理.解决方案三:没用.....解决方案四:想到了一个办法,把所有读的数据放到一起,不管每次读的是多少,放在所接收数

Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那