写了一个socket链接的小程序,本来是要做并发连接数的检查的,现在不知道是哪里的问题,在循环创建链接的时候一次性创建大于1800个链接的时候出现链接没有正常连上去的问题,而且能连上去的只有一百多个,不知道大家有没有这方面的问题,还是程序处理太快了,服务器不响应了,导致我的链接断开了。
请高手指教,谢谢!using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;           
using System.Net.Sockets;   
using System.Threading;     namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.5.196"), 7010);
            for (int i = 1; i < 1800; i++)
            {
                Socket socket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                
                socket.Connect("192.168.5.196", 7010);
                if (socket.Connected)
                {
                    Console.WriteLine("连接成功"+i);
                }
            }
            Console.ReadLine();
            for (int i = 1; i < 1800; i++)
            {
                Socket socket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);                socket.Connect("192.168.5.196", 7010);
                if (socket.Connected)
                {
                    Console.WriteLine("连接成功" + i);
                }
            }
            Console.ReadLine();
        }
    }
}

解决方案 »

  1.   

    socket服务器是可以设置并发上限的,如果满了,就会进入等待队列,超时不处理就断了~~你最好给出服务端的代码还有,你怎么测试真是强大~~加个List<Socket>来保存好点,一是维持状态,二是测试完后作正常断开处理
      

  2.   

    能给个例子吗?保存socket的示例,
      

  3.   

    我修改了代码已经可以保存了,现在还是连接到一定数量就不成了,服务器端应该没有限制的。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;           //网络引用
    using System.Net.Sockets;   //网络引用
    using System.Threading;     //线程引用namespace ConsoleApplication1
    {
        class connect
        {
            /// <summary>保存连接的所有用户</summary>
            private List<User> userList = new List<User>();        public void Socketconnect()
            {
                lock(this)
                {
                    IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.5.196"), 7010);
                    for (int i = 1; i < 1800; i++)
                    {
                        Socket socket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                        socket.Connect("192.168.5.196", 7010);
                        NetworkStream stream = new NetworkStream(socket);
                        if (socket.Connected)
                        {
                            User user = new User(socket);
                            userList.Add(user);
                            Thread threadReceive = new Thread(ReceiveData);
                            threadReceive.Start(user);
                            Console.WriteLine("当前链接是:"+ socket.LocalEndPoint);
                            Console.WriteLine("当前连接用户数:"+ userList.Count);
                        }
                    }   
                }
            }
            private void ReceiveData(object userState)
            {
                User user = (User)userState;
                Socket newclient = user.client;
                Byte[] buffer = new Byte[1024];
                newclient.Receive(buffer);
            }
            static void Main(string[] args)
            {
                for (int i = 1; i < 3; i++)
                {
                    Thread thread;
                    connect con = new connect();
                    thread = new Thread(new ThreadStart(con.Socketconnect));
                    thread.IsBackground = true;
                    thread.Start();
                }
                Console.ReadLine();
            }
        } 
    }using System.Net.Sockets;
    using System.IO;
    namespace ConsoleApplication1
    {
        class User
        {
            public Socket client { get; private set; }
            public BinaryReader br { get; private set; }
            public BinaryWriter bw { get; private set; }
            public string userName { get; set; }
            public User(Socket client)
            {
                this.client = client;
                NetworkStream networkStream = new NetworkStream(client);
                br = new BinaryReader(networkStream);
                bw = new BinaryWriter(networkStream);
            }
            public void Close()
            {
                br.Close();
                bw.Close();
                client.Close();
            }
        }
    }
      

  4.   

    我也困在196个连接这了 Socket释放太慢 阻塞在这了