Tag: sockets

如何防止sockets/端口耗尽?

我试图通过跨多个线程的请求命中它来对网站进行性能测试。 每个线程执行n次。 (在for循环中) 但是,我遇到了问题。 特别是WebException(“无法连接到远程服务器”)与内部exception: 无法执行对套接字的操作,因为系统缺少足够的缓冲区空间或者队列已满,因此127.0.0.1:52395 我试图在每个线程500次迭代时运行100个线程。 最初我在System.Net中使用HttpWebRequest向服务器发出GET请求。 目前我正在使用WebClient因为我假设每次迭代都使用新的套接字(因此在短时间内就会有100 * 500个套接字)。 我假设WebClient(每个线程实例化一次)只会使用一个套接字。 我不需要一次打开50 000个套接字,因为我想发送GET请求,接收响应并关闭套接字,释放它以便在下一个循环迭代中使用。 我明白这将是一个问题 但是,即使使用WebClient,也会请求一堆套接字,从而在TIME_WAIT模式下生成一堆套接字(使用netstat检查)。 这会导致其他应用程序(如Internet浏览器)挂起并停止运行。 我可以用更少的迭代和/或更少的线程来操作我的测试,因为看起来套接字最终会退出这个TIME_WAIT状态。 但是,这不是一个解决方案,因为它没有充分测试Web服务器的function。 题: 在每次线程迭代后如何显式关闭套接字(从客户端)以防止TIME_WAIT状态和套接字耗尽? 码: 包装HttpRequest的类 编辑:在使用中包装WebClient,因此为每次迭代实例化,使用和处理新的WebClient。 问题仍然存在。 public sealed class HttpGetTest : ITest { private readonly string m_url; public HttpGetTest( string url ) { m_url = url; } void ITest.Execute() { using (WebClient webClient = new WebClient()){ […]

什么是消息边界?

什么是“消息bonudaries”在以下背景下? TCP和UDP之间的一个区别是UDP保留了消息边界。 我理解TCP和UDP之间的区别,但不确定“消息边界”的定义。 由于UDP包含每个数据包中的目的地和端口信息,是否可以为消息提供“边界” ?

c#中的UDP数据包捕获

Wireshark使用以下详细信息捕获LAN中的UDP数据包 Source IP 192.168.1.2 Destination IP 233.xxx Source Port 24098 Destination Port 12074,12330 我怎样才能在c#中捕获它?

具有多个客户端的TCP服务器

我正在研究TCP服务器/客户端应用程序。 我的问题是: 我的服务器应用程序启动一个新线程并阻止它,直到接受了listenforClient方法的连接 但是,如何在多个客户端连接到我的服务器时管理连接,并且他们同时请求不同的东西我如何管理客户端1获取其需要的信息以及客户端2的相同信息。 它是multithreading的,因此多个客户端可以连接,但我如何处理请求。 我不想把所有东西放在1方法中。 提前致谢 private void serverstart() { this.tcplistener = new TcpListener(IPAddress.Any, 49151); this.listenThread = new Thread(new ThreadStart(ListenForClients)); this.listenThread.Start(); } private void ListenForClients() { this.tcplistener.Start(); while (true) { //blocks until a client has connected to the server TcpClient client = this.tcplistener.AcceptTcpClient(); // here was first an message that send hello client // […]

C#中的套接字:如何获取响应流?

我想替换这个: void ProcessRequest(object listenerContext) { var context = (HttpListenerContext)listenerContext; Uri URL = new Uri(context.Request.RawUrl); HttpWebRequest.DefaultWebProxy = null; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL); httpWebRequest.Method = context.Request.HttpMethod; httpWebRequest.Headers.Clear(); if (context.Request.UserAgent != null) httpWebRequest.UserAgent = context.Request.UserAgent; foreach (string headerKey in context.Request.Headers.AllKeys) { try { httpWebRequest.Headers.Set(headerKey, context.Request.Headers[headerKey]); } catch (Exception) { } } using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { Stream […]

C#如何制作简单的UDP服务器

我可以使用UdpClient类创建UDP服务器和客户端吗? 我需要从服务器向所有客户端发送图像。 有些人可以给我看一个代码示例。 我是新手。