<span style="background-color: rgb(255, 255, 255);">  之前没做过sokect连接相关内容,第一次做,不对的希望大家指正。</span>
<span style="background-color: rgb(255, 255, 255);">1.server端ip和端口号写入配置文件中</span>
<? xml version = "1.0 " encoding = "utf-8 " ?>
< SocketConfig xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd = "http://www.w3.org/2001/XMLSchema " >
  < IPAddress >111.111.111.111 </ IPAddress>
  < Port >123</ Port>
</ SocketConfig >
<span style="background-color: rgb(255, 255, 255);">2.server端代码:</span>

   /// <summary>
        /// Socket配置文件路径.
        /// </summary>
        private readonly static string ConfigPath = System.Web.HttpContext .Current.Server.MapPath("\\ Config\\SocketConfig.xml" );

        static void Sokect()
        {
            // 加载配置文件并获取SocketConfig节点.
            XElement xElmSocketConfig = XDocument .Load(ConfigPath).Element("SocketConfig");

            // 取得IP地址节点.
            XElement xElmIpAddress = xElmSocketConfig.Element("IPAddress");
            // 取得的IP地址节点为空的场合.
            if (xElmIpAddress == null )
            {
                // 直接返回.
                return;
            }
            // 取得IP地址.
            IPAddress ipAddress = IPAddress .Parse(xElmIpAddress.Value);

            // 定义端口号.
            int iPort = 0;
            // 取得端口号节点.
            XElement xElmPort = xElmSocketConfig.Element("Port");
            // 取得的端口号节点不为空的场合.
            if (xElmPort != null )
            {
                // 取得端口号的值.
                Int32.TryParse(xElmPort.Value, out iPort);
            }

            // 定义网络端点.
            IPEndPoint ipe = new IPEndPoint(ipAddress, iPort);

            //创建一个Socket对象,如果用UDP协议,则要用SocketTyype.Dgram类型的套接字
            Socket socket = new Socket( AddressFamily.InterNetwork, SocketType .Stream, ProtocolType .Tcp);
            //绑定EndPoint对象
            socket.Bind(ipe);
            //开始监听
            socket.Listen(100);
       
            //接受到Client连接,为此连接建立新的Socket,并接受消息
            Socket temp = socket.Accept();
        
            string recvStr = "" ;
            byte[] recvBytes = new byte[1024];
            int bytes;
            //从客户端接受消息
            bytes = temp.Receive(recvBytes, recvBytes.Length, 0);
            recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

            //给Client端返回信息
            byte[] sendbytes = Encoding .UTF8.GetBytes("0");
            //返回信息给客户端
            temp.Send(sendbytes, sendbytes.Length, 0);
        }


client端代码:
  /// <summary>
        /// 建立Socket连接处理.
        /// </summary>
        private bool CreateSocketConnect()
        {
            try
            {
                // 取得服务器IP地址.
                IPAddress ipAddress = IPAddress .Parse("117.0.0.1");
                // 实例化IPEndPoint.
                IPEndPoint iep = new IPEndPoint(ipAddress,1100);
                // socketClient为空的场合.
                if (_socketClient == null )
                {
                    // 实例化Socket实例.
                    _socketClient = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType .Tcp);
                }

                // socketClient处于非连接状态的场合.
                if (!_socketClient.Connected)
                {
                    // 创建Socket连接.
                    _socketClient.Connect(iep);
                    // 等一下,服务器处理信息可能会太快.
                    Thread.Sleep(100);

                    // 发送当前售货机的Mac地址.
                    SendMessage( "0");
                    // 定义新的线程.              
                    Thread thread = new Thread(WaitForReceiveData)
                    {
                        // 设置线程为后台线程.
                        IsBackground = true
                    };
                    // 启动线程.
                    thread.Start();
                }
                return true ;
            }
            catch (Exception ex)
            {
                return false ;
            }
        }

        /// <summary>
        /// 发送消息到服务器处理.
        /// </summary>
        /// <param name="strMessage"> 消息数据 </param>
        private void SendMessage(string strMessage)
        {
            try
            {
                byte[] sendbytes = Encoding .UTF8.GetBytes(strMessage);
                _socketClient.Send(sendbytes, sendbytes.Length, SocketFlags.None);

                if (!string .IsNullOrEmpty(strMessage))
                {
                }
            }
            catch (Exception e)
            {
                throw new Exception( "向服务器发送消息" + strMessage + "失败:" + e.Message);
            }
        }

        /// <summary>
        /// 等待接收服务器发送来的数据.
        /// </summary>
        private void WaitForReceiveData()
        {
            // 循环接收数据.
            do
            {
                try
                {
                    // SocketClient为空的场合.
                    if (_socketClient == null || !_socketClient.Connected)
                    {
                        // 直接结束.
                        break;
                    }

                    // 发送0个字节到服务器,监测Socket是否处于连接状态.
                    SendMessage( string.Empty);
                    // 定义缓冲区.
                    byte[] bytes = new byte[1024];

                    // 接收数据.
                    int bytesRec = _socketClient.Receive(bytes);
                    // 数据字节数不为0的场合.
                    if (bytesRec != 0)
                    {
                        // 取得接收的字符串.
                        string strMessage = Encoding .UTF8.GetString(bytes).Trim('\0 ');
                    
                    }
                }
                catch (Exception e)
                {

                    break;
                }
                // 等待100毫秒.
                System.Threading. Thread.Sleep(100);
            } while (true );
        }




本文转载:CSDN博客