日期:2014-05-18 浏览次数:20996 次
foreach (IPAddress item in Dns.GetHostEntry("").AddressList)
{
if (System.Text.RegularExpressions.Regex.IsMatch(item.ToString(),
Constants.RegularHttp))
{
ipa = item;
break;
}
}//监听端口2020
TcpListener mylistenter = new TcpListener(ipa, Constants.IPPort);
//ThreadPool.SetMinThreads(10, 10);
//ThreadPool.SetMaxThreads(100, 100);
try
{
mylistenter.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
mylistenter.Start();
FileConfig.WritetFile(Constants.FileListenter + mylistenter.LocalEndpoint.ToString());
//int a, b;
//等待处理接入连接请求
while (true)
{
mySocket = mylistenter.AcceptSocket();
ThreadPool.QueueUserWorkItem(DoWork.ReceiveMethod, mySocket);
}
}
catch (Exception ex)
{
FileConfig.WritetFile(Constants.FileException + ex.ToString());
}
finally
{ }
private static void ReceiveMethod(object state)
{
Socket socket = (Socket)state;
int length = 0;
byte[] byteData = null;//new byte[1024];
string request = string.Empty;
string DataHeader = string.Empty;
string DataTrunk = string.Empty;
bool Flag = true;
while (true)
{
Thread.Sleep(100);
length = socket.Available;
if (socket.Connected && length > 16)
{
try
{
byteData = new byte[length];
//将从客户端流读取的数据保存到字符串request中
socket.Receive(byteData);
request = System.Text.UTF8Encoding.UTF8.GetString(byteData);
DataHeader = string.Empty;
DataTrunk = string.Empty;
ReceiveData(request, ref DataHeader, ref DataTrunk);
FileConfig.WritetFile(string.Format(Constants.FileNewData,
DataHeader, DataTrunk, request.Length, request));
}
catch (Exception ex)
{
FileConfig.WritetFile(socket.RemoteEndPoint.ToString() + Constants.FileColseException +
ex.ToString());
/*if (listSocket.Contains(socket))
{
listSocket.Remove(socket);
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();*/
}
finally
{ }
}
}
}
------解决方案--------------------
我最近也在学习这个东西
------解决方案--------------------
多线程不熟,那就先用单线程来实现,后面再优化
//ThreadPool.SetMinThreads(10, 10);
//ThreadPool.SetMaxThreads(100, 100);
其实随意设置它们并不好,因为你不知道客户机器的硬件配置。线程池是托管的,你不用去关心最大数和最小数,不要同时去开启太多的线程,同时保证线程能正常退出就行了
------解决方案--------------------