c#Tcp侦听器。。。。客户端拒绝连接
我遇到了一个有趣的场景c#Tcp侦听器。。。。客户端拒绝连接,c#,multithreading,sockets,tcp,tcplistener,C#,Multithreading,Sockets,Tcp,Tcplistener,我遇到了一个有趣的场景 创建一个简单的Tcp侦听器 while (true) { Helper.LogMessage("Waiting for connections..." + _clients.Count); var tcpClient = await tcpListener.AcceptTcpClientAsync(); ProcessSocket(tcpClient); } ProcessSocket->工作已卸载到新线程(据我所知,线程池) 客户提供
while (true)
{
Helper.LogMessage("Waiting for connections..." + _clients.Count);
var tcpClient = await tcpListener.AcceptTcpClientAsync();
ProcessSocket(tcpClient);
}
[TestMethod]
public void TestMethod2()
{
int cycles = 210;
List<int> items = new List<int>();
for (int i = 0; i < cycles; i++)
items.Add(i);
foreach (var item in items)
{
string ch = TestHelper.GetText() + item.ToString();
Send(ch);
//Thread.Sleep(10);
}
}
我将尝试第一个答案,尽管我仍在等待您的TCPView结果:
请看一看,我很确定这也是
TCPListener
以及TCPClient
的底层对象。网站会告诉你
侦听使面向连接的套接字侦听传入的连接尝试。backlog参数指定可以排队接受的传入连接数。要确定可以指定的最大连接数,请检索MaxConnections值。听不住
因此,挂起的打开连接是有限制的。如果开放连接也有一个限制,那么您只需将这两个值相加,就可以知道您将在测试中走多远。一般来说,服务器需要能够在新连接到达时更快地处理(和关闭)连接,以避免客户端拒绝。
我建议您在客户端添加一个时间戳列表,以便查看创建连接和发送数据的速度
当新信息可用时,我将更新我的答案。你也应该更新你的帖子,这样我们就不会无休止地添加评论了。请重新思考你实际上在做什么,以及你试图实现什么。你不是在“轰炸”连接,而是在发送一堆短消息。问题中缺少代码的重要部分,我们看不到错误部分。我完全知道我在做什么:-)。。。。如果您不确定,请提出一个问题。我知道代码在做什么。。。我写的。我不明白的是。。。这就是客户被拒绝的原因。。。当侦听器上的工作被告知需要一些时间时。。。i、 五秒。我知道这不是真实世界的测试。。。我在模拟恶劣的环境“轰炸”只是我用的一个有趣的词。。。用工作杀死服务器。引用“我们看不到有故障的部分”我知道我也看不到…,即代码在没有线程的情况下运行良好。因此,我认为这是一个更技术性的…而不是一个简单的编程…问题。
Send()
的代码在哪里?使用连接后是否断开连接?@TobiasKnauss我已包含请求的代码。。。。。。。。。我知道你想检查我的代码…**但是**我想说的。。。。这不要紧。。。不管怎样,您都会得到错误。。。但我很感激你在相信我之前先检查一下。我的建议是,根据需要编写TCP侦听器(必须能够接受多个客户端…),然后让侦听器模拟使用thread.sleep(5秒)工作,现在。。。我知道我一定是遇到了一些限制。。。但我想知道什么是极限以及如何衡量它们。到目前为止,您是否能够在此代码上成功连接一个(!)?我会先测试他的基础知识,你还没有在你的帖子里写任何关于它的东西,所以我只能猜测。请省略你的一系列圆点。。。。看起来很难看这就是我所想的。。。用TCPView。。。真的很难说出有用的东西。。。。一次提供的信息太多。。。你有没有关于如何缩小范围的提示…TCPView为什么很难使用TCPView数据?您可以看到计算机的所有网络连接。你可以将快照保存到文件中并对其进行分析。因为老实说,它所显示的一切都是海量的!!!信息,而不是什么是错误的。这就像打印数据一样。。。这并不能说明你被拒绝连接的原因。干草堆里的针!它还依赖于精确的手动计时来捕捉可能有用的东西。你也不会知道,除非使用分析每一个快照,这可能需要几年的时间,因为你不知道你在寻找什么,你可能会错过它。也许我做错了什么?我也尝试了积压工作,尝试了10到0到1000000之间的值,没有任何可测量的差异。TCPView显示了活动的网络连接,没有其他内容。我建议使用它来确定您的软件正在建立的连接数以及它们是否再次关闭。如果保持开放,您当然会达到一个极限!//对于网络数据监控usw wireshark,您将看到数据包,但也可能看不到何时没有打开新连接,因为我认为服务器响应将丢失。
[TestMethod]
public void TestMethod2()
{
int cycles = 210;
List<int> items = new List<int>();
for (int i = 0; i < cycles; i++)
items.Add(i);
foreach (var item in items)
{
string ch = TestHelper.GetText() + item.ToString();
Send(ch);
//Thread.Sleep(10);
}
}
private void Send(string message)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(ClientAddress), ClientPort);
try
{
socket.Connect(ipEndPoint);
byte[] messageBytes = Encoding.Unicode.GetBytes(message);
socket.Send(messageBytes);
socket.Dispose();
//socket.Close();
}
catch (Exception ex)
{
Console.WriteLine("Could not connect to Host!: " + ex.Message);
}
}