• C# Socket的Send问题,阻塞线程


    Socket sc = comm.connectSocket(ip, port, ReceiveMsg_fromPc);
    comm.sendSocketMsg16(sc,cmd);
    sc.Close();
    public static Socket connectSocket(string ip, int port, ReceiveSocketMsg receiveMsg)
        {
            Socket socket = null;
            try
            {
                IPAddress serverIP = IPAddress.Parse(ip);
                IPEndPoint serverFullAddr = new IPEndPoint(serverIP, port);//设置IP,端口  
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                //指定本地主机地址和端口号  
                socket.Connect(serverFullAddr);
    
                Thread receiveThread = new Thread(receiveSocketMessage);
                List<Object> list = new List<object>();
                list.Add(socket);
                list.Add(receiveMsg);
                receiveThread.Start(list);
            }
            catch (Exception e)
            {
                MessageBox.Show("未能与" + ip + ":" + port.ToString() + "建立通讯。
    请检查目标设备是否已经启动并保持网络畅通!");
            }
    
            return socket;
        }
    
    /// <summary>
        /// 发送16进制消息
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="msg"></param>
        public static void sendSocketMsg16(Socket socket, string msg)
        {
            byte[] byteSend = strToToHexByte(msg);
            byte[] bytes = new byte[256];
            try
            {
                //发送数据  
                //socket.Send(byteSend);
    
                int i = socket.Send(byteSend, byteSend.Length, SocketFlags.None);
    
                // Get reply from the server.
                int byteCount = socket.Receive(bytes, socket.Available,SocketFlags.None);
    
                if (byteCount > 0)
                    Console.WriteLine(Encoding.UTF8.GetString(bytes));
    
            }
            catch (Exception ex)
            {
                //lblError.Text = "出现错误,请联系管理员" + ex;
                MessageBox.Show(ex.Message);
            }
        }

      

  • 相关阅读:
    C# 多线程总结 异常处理 线程取消 锁(lock)
    C# sync/async 同步/异步
    C# Parallel 多线程并发
    C# Task TaskFactory 异步线程/异步任务
    C# ThreadPool 线程池
    Nginx基础配置
    Nginx配置通用语法
    Nginx进程间的关系
    Nginx命令行控制
    Flask框架02(路由)
  • 原文地址:https://www.cnblogs.com/timy/p/10269260.html
Copyright © 2020-2023  润新知