理想情况是:
using System.Collections.Generic;
using System.Threading;
using System.Text;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Net.Sockets;
namespace HTTPProxyServer
{
class Program
{
static void Main(string[] args)
{
Server.Start(10);
IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
for (int i = 0; i < 20; i++)
{
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
client.Connect(new IPEndPoint(IpEntry.AddressList[0], 8080));
Console.WriteLine(i + ":" + client.Connected);
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
namespace HTTPProxyServer
{
class Server
{
private Socket listener = null;
public readonly static Server instance;
static Server()
{
instance = new Server();
instance.listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
}
public static void Start(int number)
{
Thread thread = new Thread(new ParameterizedThreadStart((object backlog) =>
{
IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
for (int i = 0; i < IpEntry.AddressList.Length; i++)
{
instance.listener.Bind(new IPEndPoint(IpEntry.AddressList[i], 8080));
Console.WriteLine("bind : " + IpEntry.AddressList[i].AddressFamily);
}
instance.listener.Listen((int)backlog);
try
{
while (true)
{
instance.listener.BeginAccept(
new AsyncCallback(AcceptCallback),
instance.listener);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}));
thread.Start(number);
}
public static void AcceptCallback(IAsyncResult ar)
{
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
Console.WriteLine("conneceted : " + handler.RemoteEndPoint.ToString());
//todo
//handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
// new AsyncCallback(ReadCallback), state);
}
}
}