//服务端各位高手帮忙看看,小女子感激不尽using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Reflection;namespace Socket3
{
    class Class1
    {
        static Socket temp = null;
        public static void StartAccept()
        {            int port = 2000;
            string host = "172.16.10.168";            ///创建终结点(EndPoint)
            IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
            IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例            //创建socket并开始监听
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字            s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
            s.Listen(0);//开始监听
            Console.WriteLine("等待客户端连接");               
            while (true)
            {
                try
                {
                        ///接受到client连接,为此连接建立新的socket,并接受信息
                        Socket temp = s.Accept();//为新建连接创建新的socket
                        Console.WriteLine("建立连接");
                        string recvStr = "";
                        byte[] recvBytes = new byte[1024];
                        int bytes;
                        bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
                        recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
                        Console.WriteLine(recvStr);
                        string[] str = Spilter.StringSplit(recvStr.Remove(recvStr.Length - 6), "~`~^~~");                        // int.TryParse(str[0].ToString();
                        //string recvStr = "100~`~^~~ABECommand~`~^~~get_Flights_Only~`~^~~mac地址~`~^~~detruser~`~^~~123456~`~^~~CA155~`~^~~2010-04-25~`~^~~6~`~^~~0";
                        //string[] str = Spilter.StringSplit(recvStr, "~`~^~~");
                        //if (Encoding.UTF8.GetBytes(recvStr).Length - str[0].Length != int.Parse(str[0].ToString()))
                        //{
                        //    Console.WriteLine("数据没有接收完全" + Encoding.UTF8.GetBytes(recvStr).Length);
                        //    byte[] bs1 = Encoding.UTF8.GetBytes("数据没有接收传过来");
                        //    temp.Send(bs1, bs1.Length, 0);//返回信息给客户端
                        //    return;
                        //}                        object[] oArray = new object[str.Length - 4];
                        for (int i = 0; i < str.Length - 4; i++)
                        {
                            oArray[i] = str[i + 4];
                        }                        object obj2 = "";
                        try
                        {
                            object obj = Assembly.GetExecutingAssembly().CreateInstance("Socket3." + str[1].ToString(), false);                            obj2 = Type.GetType("Socket3." + str[1].ToString()).GetMethod(str[2].ToString()).Invoke(obj, oArray);                        }
                        catch
                        {
                            byte[] bs2 = Encoding.UTF8.GetBytes("你传过来的参数不正确");
                            temp.Send(bs2, bs2.Length, 0);//返回信息给客户端
                        }
                        ///给client端返回信息
                        Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来                        byte[] bs = Encoding.UTF8.GetBytes(obj2.ToString());
                        temp.Send(bs, bs.Length, 0);//返回信息给客户端
                        //temp.Close();
                        //s.Close();
                  
                   
                }
                catch (Exception ex)
                {
                    Console.WriteLine("异常: {0}", ex);
                    byte[] bs2 = Encoding.UTF8.GetBytes("异常");
                    temp.Send(bs2, bs2.Length, 0);//返回信息给客户端
                }
              
                Console.WriteLine("Press Enter to Exit");
            
            }
        }        static void Main(string[] args)
        {
                Thread t = new Thread(new ThreadStart(StartAccept));
                t.Start();            Console.Read();        }    }
}