using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Reflection;
namespace ConsoleApplication1
{
public class Program
{
Thread[] SocketThreadList = new Thread[100];
static Socket TCPListen = null;
static void Main(string[] args)
{
TCPListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint LocalPort = new IPEndPoint(IPAddress.Any, 55000);
TCPListen.Bind(LocalPort); TCPListen.Listen(100);
Thread AcceptThread = new Thread(new ThreadStart(AcceptWorkThread));
AcceptThread.Start();
Console.WriteLine("****** 软创通信服务器程序 ******");
Console.WriteLine(string.Format("开始监听 <{0}>", LocalPort));
Console.WriteLine("单击回车键退出SOCKET");
Console.ReadLine(); GC.Collect(); GC.WaitForPendingFinalizers();
}
// 接收连接线程
[STAThread]
static void AcceptWorkThread()
{
// 指示为后台线程
Thread.CurrentThread.IsBackground = true;
while (true)
{
// 为新建连接创建新的Socket实例
Socket s_Accept = TCPListen.Accept();
IPEndPoint remoteAddress = (IPEndPoint)s_Accept.RemoteEndPoint;
Console.WriteLine(string.Format("接收到来自 {0} 的连接", remoteAddress));
// 接收数据专用线程
Thread ReceiveThread = new Thread(new ParameterizedThreadStart(ReceiveWorkThread));
ReceiveThread.Start(s_Accept);
Thread.Sleep(100);
}
}
static void ReceiveWorkThread(object obj)
{
Thread.CurrentThread.IsBackground = true; // 标识后台线程
Socket s_Receive = (Socket)obj;
byte[] buffer = new byte[1024]; // 创建接收缓冲
IPEndPoint remoteAddress = (IPEndPoint)s_Receive.RemoteEndPoint;
try
{
while (s_Receive.Connected)
{
if (s_Receive.Connected)
{
int ReceiveCount = s_Receive.Receive(buffer);
Console.WriteLine(string.Format("{0}:{1}", remoteAddress, Encoding.Default.GetString(buffer)));
// 返回接收成功数据
s_Receive.Send(Encoding.Default.GetBytes("AAA"));
Thread.Sleep(100);
}
else { s_Receive.Close(); break; }
}
}
catch { Console.WriteLine(string.Format("{0} 断开连接", remoteAddress)); }
}
}
}