日期:2014-05-18 浏览次数:21250 次
/// <summary>
        /// Socket通讯接受后转换成字符串
        /// </summary>
        /// <param name="ip">Socket通讯IP</param>
        /// <param name="sendStr">发送内容</param>
        /// <returns>通讯后终端返回字符串</returns>
        public static string SocketSendAndReceiveString(IPEndPoint ip, string sendStr)
        {
            lock(ip)
            {
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 10000);
                    s.Connect(ip);
                    byte[] sendBy = Encoding.UTF8.GetBytes(sendStr);
                    s.Send(sendBy, sendBy.Length, 0);
                    string recvStr = "";
                    byte[] recvBy = new byte[10024];
                    int bytes = 0;
                    bytes = s.Receive(recvBy, recvBy.Length, 0);
                    recvStr += Encoding.UTF8.GetString(recvBy, 0, bytes);
                    do
                    {
                        try
                        {
                            StringReader sr = new StringReader(recvStr);
                            XmlTextReader reader = new XmlTextReader(sr);
                            DataSet ds = new DataSet();
                            ds.ReadXml(reader);
                            break;
                        }
                        catch
                        {
                            bytes = s.Receive(recvBy, recvBy.Length, 0);
                            recvStr += Encoding.UTF8.GetString(recvBy, 0, bytes);
                        }
                    } while (true);
                    s.Close();
                    return recvStr;
                }
                catch (Exception ex)
                {
                    s.Close();
                    return null;
                    //throw ex;
                }
            }
        }