C# socket服务器

来源:互联网 发布:什么爽肤水比较好知乎 编辑:程序博客网 时间:2024/05/16 08:31
public class SocSever    {        private int port = 102;        private IPAddress ip;        private TcpListener tlsocket;        private TcpClient tcsocket;        private NetworkStream tcStream;        private Thread listenTh;        private System.Timers.Timer tickHart;        public SocSever(string strIp,int nPort)        {            if (!IPAddress.TryParse(strIp, out ip))            {                ip = Dns.GetHostAddresses(Dns.GetHostName())[0];            }            if (nPort != 0)            {                port = nPort;            }            tickHart = new System.Timers.Timer(1000f);            tickHart.AutoReset = true;            tickHart.Enabled = false;            tickHart.Elapsed += new System.Timers.ElapsedEventHandler(tickHart_Elapsed);            tlsocket = new TcpListener(ip, port);            listenTh = new Thread(new ThreadStart(StartListen));            listenTh.Start();        }        private void StartListen()        {            tlsocket.Start();            while (true)            {                tcsocket = this.tlsocket.AcceptTcpClient();                tcStream = tcsocket.GetStream();                Thread clientThread = new Thread(new ThreadStart(HandleClient));                clientThread.Start();            }        }        private void HandleClient()        {            byte[] message = new byte[2048];            tickHart.Enabled = true;            while (true)            {                int bytesRead = 0;                try                {                    bytesRead = tcStream.Read(message, 0, 2048);                }                catch (SystemException ex)                {                    break;                }                if (bytesRead == 0)                {                    break;                }                                ASCIIEncoding encoder = new ASCIIEncoding();                Console.WriteLine(encoder.GetString(message, 0, bytesRead));            }            tickHart.Enabled = false;            tcsocket.Close();            tcsocket = null;        }        private void tickHart_Elapsed(object obj, System.Timers.ElapsedEventArgs ea)        {            try            {                byte[] byteArray = new byte[] { (byte)6 };                tcStream.Write(byteArray, 0, 1);                tcStream.Flush();            }            catch (System.Net.Sockets.SocketException ex)            {                tcsocket.Close();            }        }        public void WriteMsgToClient(string strxml)        {            try            {                ASCIIEncoding encoder = new ASCIIEncoding();                byte[] btStream = encoder.GetBytes(strxml);                tcStream.Write(btStream, 0, btStream.Length);                tcStream.Flush();            }            catch(SocketException ex)            {                tcsocket.Close();            }        }    }


服务器:

SocSever ss = new SocSever("192.168.1.2",9999);

控制台客户端:

class Program    {        static void Main(string[] args)        {            TcpClient client = new TcpClient();            IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.102"), 102);            Console.WriteLine("输入字符C开始...");            while (Console.ReadKey().Key == System.ConsoleKey.C)            {                Console.WriteLine();                client.Connect(serverEndPoint);                NetworkStream clientStream = client.GetStream();                Thread clientThread = new Thread(new ParameterizedThreadStart(ReadSomething));                clientThread.Start(clientStream);                while (true)                {                    Console.WriteLine("输入要发送的信息");                    ASCIIEncoding encoder = new ASCIIEncoding();                    byte[] buffer = encoder.GetBytes(Console.ReadLine());                    clientStream.Write(buffer, 0, buffer.Length);                    clientStream.Flush();                }            }        }        static void ReadSomething(object clientstream)        {            NetworkStream nws = (NetworkStream)clientstream;            byte[] message = new byte[2048];            while (true)            {                int bytesRead = 0;                try                {                    bytesRead = nws.Read(message, 0, 2048);                }                catch (SystemException ex)                {                    break;                }                if (bytesRead == 0)                {                    break;                }                ASCIIEncoding encoder = new ASCIIEncoding();                Console.WriteLine("服务器消息:"+encoder.GetString(message, 0, bytesRead));            }        }    }


原创粉丝点击