要回答你的問題的另一半:
異步TCP套接字的主題任何其他意見是值得歡迎的,以及
簡單地說,我不會在時尚管理這個由您原來的帖子演示。而是從System.Net.Sockets.TcpClient和System.Net.Sockets.TcpListener類尋求幫助。使用BeginAcceptSocket(...)和BeginRead(...)之類的異步調用,並允許ThreadPool完成它的工作。以這種方式組合起來真的很容易。
你應該能夠實現你而沒有編碼可怕的話「新主題」希望所有的服務器行爲:)
這裏是思想的一個基本的例子,減去正常關機的想法,異常處理ECT:
public static void Main()
{
TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Loopback, 8080));
listener.Start();
listener.BeginAcceptTcpClient(OnConnect, listener);
Console.WriteLine("Press any key to quit...");
Console.ReadKey();
}
static void OnConnect(IAsyncResult ar)
{
TcpListener listener = (TcpListener)ar.AsyncState;
new TcpReader(listener.EndAcceptTcpClient(ar));
listener.BeginAcceptTcpClient(OnConnect, listener);
}
class TcpReader
{
string respose = "HTTP 1.1 200\r\nContent-Length:12\r\n\r\nHello World!";
TcpClient client;
NetworkStream socket;
byte[] buffer;
public TcpReader(TcpClient client)
{
this.client = client;
socket = client.GetStream();
buffer = new byte[1024];
socket.BeginRead(buffer, 0, 1024, OnRead, socket);
}
void OnRead(IAsyncResult ar)
{
int nBytes = socket.EndRead(ar);
if (nBytes > 0)
{
//you have data... do something with it, http example
socket.BeginWrite(
Encoding.ASCII.GetBytes(respose), 0, respose.Length, null, null);
socket.BeginRead(buffer, 0, 1024, OnRead, socket);
}
else
socket.Close();
}
}
有關如何做到這一點看SslTunnel Library我寫了前段時間更爲複雜的例子。
你去監獄,然後你會被釋放。 – SwDevMan81 2010-05-17 20:23:35