各位大神:
现在我是建立一个客户端与服务器的socket连接,进行数据的发送。现在想达到的效果是可以一个窗口界面建立50个socket连接,然后通过50个连接进行数据发送。也就是一个界面实现模拟50个客户端的需求。现在只能实现一个界面作为一个客户端。请问大神们有什么办法。
现在我是建立一个客户端与服务器的socket连接,进行数据的发送。现在想达到的效果是可以一个窗口界面建立50个socket连接,然后通过50个连接进行数据发送。也就是一个界面实现模拟50个客户端的需求。现在只能实现一个界面作为一个客户端。请问大神们有什么办法。
解决方案 »
- 请教大家怎么将c#中的string类型变量存入到mysql中
- new ArrayList() 后怎么对ArrayList释放吗
- 关于随即函数的问题,谢谢!
- 启动进度的问题
- 一个程序要执行比较复杂的算法(全是对字符串的分析).如何让其不占用系统太多资源.
- listView 如何实现行的上下移动
- 求在html源代码中处理字符串???????
- 0.3333333,我想保留2位小数,C#怎么实现?
- 怎样在C#中调用windows本地应用程序
- 急急急急急急急!!怎么在弹出的窗口中调用主窗口类中的变量!!!在线等!朋友们要来帮忙啊!
- 不同热敏打印机打印出来标签效果不一样的问题
- R\\d+C\\d+|\\$?[A-Z]+\\$?\\d+正则表达式求解释
就是点击连接后和服务器产生50个tcp连接,然后点击登录按钮,向50个tcp连接发送数据,点击注册又可以向对应的tcp连接发送数据,本地端口对应上。
你都没有说明你是怎么做的,就说不能实现?
是这个样的点连接之后呢。我做了一个for循环然后开了50个线程,建立了50个socke连接。然后服务器也连接上了。然后点登陆有个数据发送
socketClient.Send(buildpacketeverystate.loginData); 发送以后只是建立的最后一个socke连接能发送数据。我想达到的想过是点这个登陆可以在50个socke连接都发送这个数据。
既然你写 socketClient.Send(......),这其实就是你在一个对象(窗口对象)范畴中引用了一个 client 对象属性/字段。另外这个 client “建立”完了即可,跟线程无关。
好吧,我觉着你想做测试,ok,我给你一个测试工具。不用重复玩了。学会这个工具够用。(如果你就是要说我就是要写个测试工具练手,另当别论。当然话还是两头说,如果你就是要写个测试工具练手,也建议按照我下面的工具的方向去写,人家完善了那么多年也不是白完善的,起码你要看的见别人都做了什么,别闷头搞自己的)压力测试工具:apache-jmeter
到你或你朋友的 apache\bin 拷贝一个就能用自己写,练练手也没什么坏处
你描述的思路并没有什么问题,但可能是你哪里搞的不对,把多线程变成单线程了(没看到代码,不好说)
//这是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);
}
是这个意思
我也在研究这个,不过是java。我研究的原因是发现单线程传输数据因为window size的大小问题导致速度不高。那么多线程能解决这个问题吗?