我想模拟N个客户端向服务器发送消息,以便测试服务器的负载性能。
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BasicSocket.Client;
using System.IO;
using BasicSocket.Data;
using System.Globalization;
using System.Threading;namespace testclient
{ public class Connect
{
/// <summary>
/// 建立一个SOCKET客户端
/// </summary>
public static SocketClient client = new SocketClient(); // This method will be called when the thread is started.
public void DoWork()
{
//client.DataOn += new DataOn(client_DataOn); //数据包进入事件 //client.Disconnection += new ExceptionDisconnection(client_Disconnection); //数据包断开事件
string hostip = "127.0.0.1"; string localip = Convert.ToString(Program.count); //if (client.ConnectionTo(hostip, 9982)) //使用同步连接到服务器,一步就用Begin开头的那个
if (client.ConnectionTo(hostip, 9982)) //使用同步连接到服务器,一步就用Begin开头的那个
{
while (true)
{
//string localip = Console.ReadLine();
Thread.Sleep(1000); //防止调用频繁访问冲突
SendDataClass.PPo temp = new SendDataClass.PPo();
temp.RealWeight = 14.5;
temp.ShaftType = 2;
temp.License = localip;
temp.Checker = "hongyu";
string uploadtime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss", DateTimeFormatInfo.InvariantInfo);
temp.UploadTime = uploadtime;
client.SendTo(BufferFormatV2.FormatFCA(temp)); //用组合数据包模拟PPO对象 但GUID 是字符串类型;
//client.SendTo(BufferFormat.FormatFCA(temp));
}
client.Close();
}
else
{
Console.WriteLine(Convert.ToString(Program.count) + "无法连接服务器");
} Console.ReadLine(); //while (!_shouldStop)
//{
// Console.WriteLine("worker thread: working...");
//}
//Console.WriteLine("worker thread: terminating gracefully.");
} static void client_Disconnection(string message)
{
Console.WriteLine(message);
} static void client_DataOn(byte[] Data)
{
throw new NotImplementedException();
} //public void RequestStop()
//{
// _shouldStop = true;
//}
//// Volatile is used as hint to the compiler that this data
//// member will be accessed by multiple threads.
//private volatile bool _shouldStop;
} class Program
{
public static int count = 0; static void Main(string[] args)
{
Connect[] workerObject = new Connect[10000];
Thread[] workerThread = new Thread[10000]; //Console.WriteLine("main thread: Starting worker thread...");
//while (!workerThread.IsAlive);
for ( int i = 0; i < 10000; i++ )
{
workerObject[i] = new Connect();
workerThread[i] = new Thread(workerObject[i].DoWork);
count++;
workerThread[i].Start();
Thread.Sleep(1000);
//workerThread.Join();
Console.WriteLine("new thread." + Convert.ToString(count)); }
//Console.WriteLine("main thread: Worker thread has terminated."); } }
}新建N个线程,每个线程模拟一个客户端,每个客户端循环向服务器发送消息。
但是输出结果只能建立一个连接,其他线程都不能连上服务器,我想问题应该出在客户端上,各位大侠帮忙看看怎么改!测试线程服务器
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BasicSocket.Client;
using System.IO;
using BasicSocket.Data;
using System.Globalization;
using System.Threading;namespace testclient
{ public class Connect
{
/// <summary>
/// 建立一个SOCKET客户端
/// </summary>
public static SocketClient client = new SocketClient(); // This method will be called when the thread is started.
public void DoWork()
{
//client.DataOn += new DataOn(client_DataOn); //数据包进入事件 //client.Disconnection += new ExceptionDisconnection(client_Disconnection); //数据包断开事件
string hostip = "127.0.0.1"; string localip = Convert.ToString(Program.count); //if (client.ConnectionTo(hostip, 9982)) //使用同步连接到服务器,一步就用Begin开头的那个
if (client.ConnectionTo(hostip, 9982)) //使用同步连接到服务器,一步就用Begin开头的那个
{
while (true)
{
//string localip = Console.ReadLine();
Thread.Sleep(1000); //防止调用频繁访问冲突
SendDataClass.PPo temp = new SendDataClass.PPo();
temp.RealWeight = 14.5;
temp.ShaftType = 2;
temp.License = localip;
temp.Checker = "hongyu";
string uploadtime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss", DateTimeFormatInfo.InvariantInfo);
temp.UploadTime = uploadtime;
client.SendTo(BufferFormatV2.FormatFCA(temp)); //用组合数据包模拟PPO对象 但GUID 是字符串类型;
//client.SendTo(BufferFormat.FormatFCA(temp));
}
client.Close();
}
else
{
Console.WriteLine(Convert.ToString(Program.count) + "无法连接服务器");
} Console.ReadLine(); //while (!_shouldStop)
//{
// Console.WriteLine("worker thread: working...");
//}
//Console.WriteLine("worker thread: terminating gracefully.");
} static void client_Disconnection(string message)
{
Console.WriteLine(message);
} static void client_DataOn(byte[] Data)
{
throw new NotImplementedException();
} //public void RequestStop()
//{
// _shouldStop = true;
//}
//// Volatile is used as hint to the compiler that this data
//// member will be accessed by multiple threads.
//private volatile bool _shouldStop;
} class Program
{
public static int count = 0; static void Main(string[] args)
{
Connect[] workerObject = new Connect[10000];
Thread[] workerThread = new Thread[10000]; //Console.WriteLine("main thread: Starting worker thread...");
//while (!workerThread.IsAlive);
for ( int i = 0; i < 10000; i++ )
{
workerObject[i] = new Connect();
workerThread[i] = new Thread(workerObject[i].DoWork);
count++;
workerThread[i].Start();
Thread.Sleep(1000);
//workerThread.Join();
Console.WriteLine("new thread." + Convert.ToString(count)); }
//Console.WriteLine("main thread: Worker thread has terminated."); } }
}新建N个线程,每个线程模拟一个客户端,每个客户端循环向服务器发送消息。
但是输出结果只能建立一个连接,其他线程都不能连上服务器,我想问题应该出在客户端上,各位大侠帮忙看看怎么改!测试线程服务器
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货