各位大神:
    现在我是建立一个客户端与服务器的socket连接,进行数据的发送。现在想达到的效果是可以一个窗口界面建立50个socket连接,然后通过50个连接进行数据发送。也就是一个界面实现模拟50个客户端的需求。现在只能实现一个界面作为一个客户端。请问大神们有什么办法。

解决方案 »

  1.   


    就是点击连接后和服务器产生50个tcp连接,然后点击登录按钮,向50个tcp连接发送数据,点击注册又可以向对应的tcp连接发送数据,本地端口对应上。
      

  2.   

    开 50个线程,每个线程一个socket连接
    你都没有说明你是怎么做的,就说不能实现?
      

  3.   


    是这个样的点连接之后呢。我做了一个for循环然后开了50个线程,建立了50个socke连接。然后服务器也连接上了。然后点登陆有个数据发送 
    socketClient.Send(buildpacketeverystate.loginData); 发送以后只是建立的最后一个socke连接能发送数据。我想达到的想过是点这个登陆可以在50个socke连接都发送这个数据。
      

  4.   

    如果说“50个连接”,那么就是50个TcpClient 对象或者50个Socket 对象实例,不用贴你的线程。当没有消息收发的时候,不占用任何线程。所以这里主要地就是如何封装TcpClient或者Socket 对象,把同一类处理封装到一个 Class 中的问题。
      

  5.   


    既然你写 socketClient.Send(......),这其实就是你在一个对象(窗口对象)范畴中引用了一个 client 对象属性/字段。另外这个 client “建立”完了即可,跟线程无关。
      

  6.   

    既然你写 socketClient.Send(......),这其实就是你在一个对象(窗口对象)范畴中引用了一个 client 对象属性/字段。另外这个 client “建立”完了即可,跟线程无关。另外这个 client “建立”完了即可,跟线程无关。 这句话我不是很理解,您能解释一下么
      

  7.   

    比如说对于你的 client 对象(假设是 Socket类型的),发送数据使用 client.Send方法,接收数据使用 client.BeginReceive 方法,连接使用 client.BeginAccept方法,这里跟线程有什么直接关系呢?
      

  8.   

    建立连接的socket是保存为一个集合吗?发送的时候循环这个集合一个个发送不就可以了
      

  9.   

    额,这个界面有关系么,new 50个tcpclient。
    好吧,我觉着你想做测试,ok,我给你一个测试工具。不用重复玩了。学会这个工具够用。(如果你就是要说我就是要写个测试工具练手,另当别论。当然话还是两头说,如果你就是要写个测试工具练手,也建议按照我下面的工具的方向去写,人家完善了那么多年也不是白完善的,起码你要看的见别人都做了什么,别闷头搞自己的)压力测试工具:apache-jmeter
      

  10.   

    压力测试工具很多的 apache 就带有一个 ab.exe 
    到你或你朋友的 apache\bin 拷贝一个就能用自己写,练练手也没什么坏处
    你描述的思路并没有什么问题,但可能是你哪里搞的不对,把多线程变成单线程了(没看到代码,不好说)
      

  11.   


    //这是tcp连接
    //连接tcp
            //创建 1个客户端套接字 和1个负责监听服务端请求的线程  
            Socket socketClient = null;
            Thread threadClient = null;
            public void button1_tcpconnect_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 50; i++)
                {
                    ClientForm clientform = new ClientForm();
                    //定义一个套字节监听  包含3个参数(IP4寻址协议,流式连接,TCP协议)
                    socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    //需要获取文本框中的IP地址
                    IPAddress ipaddress = IPAddress.Parse(txtIP.Text.Trim());
                    //将获取的ip地址和端口号绑定到网络节点endpoint上
                    IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(txtPort.Text.Trim()));
                    try
                    {
                        //这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bind
                        socketClient.Connect(endpoint);
                    }
                    catch (SocketException se)
                    {
                        MessageBox.Show("异常:" + se.Message);
                    }
                }
                //创建一个线程 用于监听服务端发来的消息
                threadClient = new Thread(RecMsg);
                //将窗体线程设置为与后台同步
                threadClient.IsBackground = true;
                //启动线程
                threadClient.Start();  
            } /// <summary>登录
            /// 发送登录包
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button_login_Click(object sender, EventArgs e)
            {
                    BuildPacketEveryState buildpacketeverystate = new BuildPacketEveryState();
                    buildpacketeverystate.chargepilecode = this.comboBox_selectsn.Text.ToString();
                    buildpacketeverystate.BuildPacket_Login();
                    //发包 
                    socketClient.Send(buildpacketeverystate.loginData);  
            }
      

  12.   


    是这个意思
    我也在研究这个,不过是java。我研究的原因是发现单线程传输数据因为window size的大小问题导致速度不高。那么多线程能解决这个问题吗?