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}