C# 同步Socket Server 完美版

1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.IO;
 5using System.Net;
 6using System.Net.Sockets;
 7using System.Threading;
 8using System.Reflection;
 9
10namespace ConsoleApplication1
11{
12    public class Program
13    {
14        Thread[] SocketThreadList = new Thread[100];
15
16        static Socket TCPListen = null;
17
18        static void Main(string[] args)
19        {
20            TCPListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
21            
22            IPEndPoint LocalPort = new IPEndPoint(IPAddress.Any, 55000);
23
24            TCPListen.Bind(LocalPort); TCPListen.Listen(100);
25
26            Thread AcceptThread = new Thread(new ThreadStart(AcceptWorkThread));
27
28            AcceptThread.Start();
29
30            Console.WriteLine("****** 软创通信服务器程序 ******");
31
32            Console.WriteLine(string.Format("开始监听 <{0}>", LocalPort));
33
34            Console.WriteLine("单击回车键退出SOCKET");
35
36            Console.ReadLine(); GC.Collect(); GC.WaitForPendingFinalizers();
37        }

38
39        // 接收连接线程
40        [STAThread]
41        static void AcceptWorkThread()
42        {
43            // 指示为后台线程
44            Thread.CurrentThread.IsBackground = true;
45
46            while (true)
47            {
48                // 为新建连接创建新的Socket实例
49                Socket s_Accept = TCPListen.Accept();
50
51                IPEndPoint remoteAddress = (IPEndPoint)s_Accept.RemoteEndPoint;
52
53                Console.WriteLine(string.Format("接收到来自 {0} 的连接", remoteAddress));
54
55                // 接收数据专用线程
56
57                Thread ReceiveThread = new Thread(new ParameterizedThreadStart(ReceiveWorkThread));
58
59                ReceiveThread.Start(s_Accept);
60
61                Thread.Sleep(100);
62            }

63        }

64
65        static void ReceiveWorkThread(object obj)
66        {
67            Thread.CurrentThread.IsBackground = true;   // 标识后台线程
68
69            Socket s_Receive = (Socket)obj;
70
71            byte[] buffer = new byte[1024];     // 创建接收缓冲
72
73            IPEndPoint remoteAddress = (IPEndPoint)s_Receive.RemoteEndPoint;
74
75            try
76            {
77                while (s_Receive.Connected)
78                {
79                    if (s_Receive.Connected)
80                    {
81
82                        int ReceiveCount = s_Receive.Receive(buffer);
83
84                        Console.WriteLine(string.Format("{0}:{1}", remoteAddress, Encoding.Default.GetString(buffer)));
85
86                        // 返回接收成功数据
87                        s_Receive.Send(Encoding.Default.GetBytes("AAA"));
88
89                        Thread.Sleep(100);
90                    }

91                    else { s_Receive.Close(); break; }
92                }

93            }

94            catch { Console.WriteLine(string.Format("{0} 断开连接", remoteAddress)); }
95        }

96    }

97}

共有0个回答