Socket通讯

 Socket监听客户端,范例如下:

        private void autolink()
        {

            // 创建负责监听的套接字,注意其中的参数;
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 获得文本框中的IP对象;
            IPAddress address = IPAddress.Parse(MainForm.m_xml.m_Read(m_xmlDociment.PathRoot_LocalIp, -1, m_xmlDociment.Default_Attributes_LocalIp[0]));
            // 创建包含ip和端口号的网络节点对象;
            IPEndPoint endPoint = new IPEndPoint(address, Port);
            try
            {
                // 将负责监听的套接字绑定到唯一的ip和端口上;
                socketWatch.Bind(endPoint);
            }
            catch (SocketException se)
            {
                return;
            }
            // 设置监听队列的长度;
            socketWatch.Listen(10);
            // 创建负责监听的线程;
            threadWatch = new Thread(WatchConnecting);
            threadWatch.IsBackground = true;
            threadWatch.Start();

          }

          

        void WatchConnecting()
        {
            while (true) // 持续不断的监听客户端的连接请求;
            {
                // 开始监听客户端连接请求,Accept方法会阻断当前的线程;
                Socket sokConnection = socketWatch.Accept(); // 一旦监听到一个客户端的请求,就返回一个与该客户端通信的 套接字;
                // 想列表控件中添加客户端的IP信息;
                sendadr = sokConnection.RemoteEndPoint.ToString();
                // 将与客户端连接的 套接字 对象添加到集合中;
                dict.Add(sokConnection.RemoteEndPoint.ToString(), sokConnection);
                Thread thr = new Thread(RecMsg);
                thr.IsBackground = true;
                thr.Start(sokConnection);
                dictThread.Add(sokConnection.RemoteEndPoint.ToString(), thr); // 将新建的线程 添加 到线程的集合中去。
            }
        }

        
        void RecMsg(object sokConnectionparn)
        {
            Socket sokClient = sokConnectionparn as Socket;
            while (true)
            {
                // 定义一个2M的缓存区;
                byte[] arrMsgRec = new byte[1024 * 1024 * 2];
                // 将接受到的数据存入到输入 arrMsgRec中;
                int length = -1;
                try
                {
                    length = sokClient.Receive(arrMsgRec); // 接收数据,并返回数据的长度;
                }
                catch (SocketException se)
                {                    
                    // 从 通信套接字 集合中删除被中断连接的通信套接字;
                    dict.Remove(sokClient.RemoteEndPoint.ToString());
                    // 从通信线程集合中删除被中断连接的通信线程对象;
                    dictThread.Remove(sokClient.RemoteEndPoint.ToString());
                    // 从列表中移除被中断的连接IP
                    sendadr = "";
                    sendpassword = true;
                    return;
                }
                catch (Exception e)
                {
                    // 从 通信套接字 集合中删除被中断连接的通信套接字;
                    dict.Remove(sokClient.RemoteEndPoint.ToString());
                    // 从通信线程集合中删除被中断连接的通信线程对象;
                    dictThread.Remove(sokClient.RemoteEndPoint.ToString());
                    // 从列表中移除被中断的连接IP
                    sendadr = "";
                    sendpassword = true;
                    return;
                }
                string strData = System.Text.Encoding.Default.GetString(arrMsgRec);// 将接受到的字节数据转化成字符串;
                strData = strData.Substring(0, length);
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel是一款强大的电子表格软件,它提供了许多功能和工具,可以用于数据分析、图表绘制、计算等。然而,Excel并不直接支持Socket通讯,因为它主要用于处理数据和计算,而不是网络通信。 Socket通讯是一种网络通信协议,通过使用Socket可以实现不同计算机之间的数据传输。通常,Socket通讯主要用于传输文本或二进制数据,以便实现不同计算机之间的实时通信。 要在Excel中实现Socket通讯,需要借助于编程语言来实现Socket编程,并将其集成到Excel中。一种常见的方法是使用VBA(Visual Basic for Applications)来编写宏,以实现Socket通讯。 在VBA中,可以使用Winsock控件来实现Socket通讯。Winsock控件是一个COM组件,提供了Socket编程所需的功能和接口。通过在Excel中引用Winsock控件,可以编写VBA代码来连接到远程计算机,并发送和接收数据。 首先,需要在Excel中添加Winsock控件的引用。然后,在VBA编辑器中,可以使用类似于以下的代码来实现Socket通讯: ``` Dim sock As New Winsock Dim serverIP As String Dim serverPort As Integer Sub ConnectToServer() serverIP = "192.168.0.1" '设置远程计算机的IP地址 serverPort = 1234 '设置连接的端口号 sock.RemoteHost = serverIP sock.RemotePort = serverPort sock.Connect '连接到远程计算机 End Sub Sub SendData(data As String) sock.SendData data '发送数据到远程计算机 End Sub Sub ReceiveData() Dim receivedData As String Do While sock.State = sckConnected '循环接收数据 receivedData = sock.GetData '接收数据 '处理接收到的数据 Loop End Sub Sub DisconnectFromServer() sock.Close '关闭和远程计算机的连接 End Sub ``` 通过调用相应的宏来连接到远程服务器、发送和接收数据以及断开连接,可以实现Excel和其他计算机之间的Socket通讯。 需要注意的是,实现Socket通讯需要具备一定的编程能力,并且需要了解Socket编程的基本原理和相关的网络知识。此外,还需要确保远程计算机的防火墙设置允许Socket通讯,以便正常连接和传输数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值