现在的位置: 首页 > 综合 > 正文

Listen(int backlog)的意义

2011年12月15日 ⁄ 综合 ⁄ 共 2676字 ⁄ 字号 评论关闭

理想情况是:

 

 

 

 

 

using System;
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;
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);
        }

    }

} 

 

抱歉!评论已关闭.