问题标签 [tcpclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - TcpListener 排队连接的速度比我清除它们的速度快
据我了解,TcpListener
一旦您调用Start()
. 每次调用AcceptTcpClient
(or BeginAcceptTcpClient
) 时,它都会从队列中取出一项。
如果我们通过一次向它发送 1,000 个连接来加载测试我们的TcpListener
应用程序,队列的构建速度远远快于我们清除它的速度,导致(最终)客户端超时,因为它没有得到响应,因为它的连接仍在队列。但是,服务器似乎没有太大压力,我们的应用程序没有消耗太多 CPU 时间,并且机器上的其他受监控资源也没有出汗。感觉我们现在的运行效率不够高。
我们正在调用BeginAcceptTcpListener
,然后立即移交给一个ThreadPool
线程来实际完成工作,然后BeginAcceptTcpClient
再次调用。所涉及的工作似乎并没有给机器带来任何压力,它基本上只是 3 秒的睡眠,然后是字典查找,然后是 100 字节的写入TcpClient
流。
这是TcpListener
我们正在使用的代码:
我假设答案将与 usingSockets
而不是TcpListener
或至少 using相关TcpListener.AcceptSocket
,但我想知道我们将如何去做?
我们的一个想法是AcceptTcpClient
立即调用多个对象之一。这样,我们可以在不同的线程上轮询这些队列(每个线程一个队列),而不会遇到可能在等待其他操作时阻塞线程的监视器。然后,每个队列线程可以用来在一个线程中完成工作,然后继续将其队列中的下一个出队。你会推荐这种方法,还是我们正在使用的问题,并且没有任何快速出队可以解决这个问题?Enqueue
TcpClient
Queue<TcpClient>
Dequeue
ThreadPool.QueueUserWorkItem
ThreadPool
TcpClient
TcpListener
c# - 多个线程写入同一个套接字问题
我的程序使用套接字进行进程间通信。有一台服务器正在侦听本地主机上的套接字端口(B),等待 TCP 客户端列表进行连接。在服务器的另一端是另一个将数据发送到互联网的套接字(A)。服务器旨在获取 TCP 客户端发送给他的所有内容,并转发到 Internet 上的服务器。我的问题是,如果两个 TCP 客户端碰巧同时发送数据,这对服务器的传出套接字(A)来说会是一个问题吗?
谢谢
performance - 搜索模式以创建用于高性能消息传递的 TCP 连接池
我正在用 C# 创建一个新的客户端/服务器应用程序,并希望有相当高的连接率。这让我想到了数据库连接池,它有助于减轻在客户端和数据库之间创建和处理连接的费用。
我想为我的应用程序创建类似的功能,但找不到任何关于如何应用此模式的好示例。每次我想向服务器发送消息并接收回执消息时,我真的需要启动一个 TcpClient 实例吗?每个连接预计在 1-5KB 之间传输,每个连接接收 1KB 响应消息。
我意识到这个问题有些模糊,但我是从头开始的,所以我愿意接受建议。即使这意味着我的假设都是错误的。
c# - 在这种情况下应该使用 TcpClient 吗?
我必须与 iPhone 通信。我有它的 IP 地址和端口(通过 Bonjour 获得)。
我需要发送一个标头“0x50544833”(或类似的,它是一个十六进制数),然后是数据的大小(如下),然后是数据本身。
数据只是一个看起来像这样的字符串:
该要求还说我必须以小端格式发送数据(无论如何我认为这是英特尔的默认格式)。
所以它将是:hex_number + 数据大小 + string_with_the_above_xml。
我需要将它发送到 iPhone 并阅读响应。
根据您的经验,发送此数据(并读取响应)的最佳方式是什么?
更新:我没有编写 iPhone 软件。它使用 Tcp/IP。端口取决于操作系统,但我看到它的范围从 57xxx 到 60xxxx,但并非总是如此。该软件的 Mac 版本使用 Tcp/Ip。我无法访问它的源代码,但我正在与它的开发人员联系,他们向我解释了我需要发送的数据的格式,然后,一旦 Bonjour 服务得到解决,“打开一个套接字并……”</p >
c# - 如果您跳出 Lock() 语句会发生什么?
我正在编写一个程序,它监听传入的 TcpClient 并在数据到达时处理它。该Listen()
方法在组件内的单独线程上运行,因此它需要是线程安全的。如果我在语句中时break
退出do
while
循环lock()
,锁会被释放吗?如果没有,我该如何做到这一点?
谢谢!
(也欢迎任何其他关于异步 TCP 套接字主题的建议。)
c# - .NET 相当于 recv?
我有一部分 C 代码正在尝试移植到 C#。
在我的 C 代码中,我创建了一个套接字,然后发出一个接收命令。接收命令是
现在,命令缓冲区返回新值,包括command_buffer[8]
指向字符串的指针。
我真的很困惑如何在 .NET 中执行此操作,因为 .NET Read() 方法专门接收字节而不是字符。重要的部分是我得到了指向字符串的指针。
有任何想法吗?
ruby - 红宝石后台服务
我有一个用 Ruby 编写的 TCPclient。我想在后台使用它。目前它有一个循环:
所以我可以运行一个客户端,它永远有效。
有没有办法作为服务运行,并将 pid 写入文件,然后我就可以通过 pid 杀死该进程?
delphi - 通过 TCP\IP 使用 Indy 发送二进制数据,如何?
如何使用 Indy 组件发送二进制数据?其中哪一个最适合这项任务?我试过使用TIdTcpClient
,但它只允许发送字符串。
我在这里找到了解决该问题的方法,但我不明白。它说的是 method Write(TIdBytes)
,但答案对我来说并不清楚。他的意思是写到某个实例TIdBytes
,以及如何将该实例与TIdTcpClient
?
谢谢你的帮助。
c# - HttpTunneling TCPClient 应用程序
我们有一个使用 TCPClient 的自定义聊天应用程序(c#)。我们在防火墙或代理后面的客户端上遇到问题。我们知道这些客户端可以毫无问题地浏览互联网,因此我们决定更改我们的 TCPClient 应用程序,以便它使用 HTTP 消息进行通信。
仅仅用标准的 HTML 标签和 HTTP 头来包装我们的文本消息就足够了吗?我们需要长久的联系。keep-alive有限制吗?防火墙或代理是否对“活动”连接有时间限制。
c# - .NET NetworkStream 关闭,如何确保读取所有数据?
我有一个开放的 TCP 连接,并使用 NetworkStream.BeginRead() 进行读取。一旦在任一端关闭连接,就会调用回调并且流对象是无用的 - 就像文档说的那样,EndRead() 抛出 IOException 或 ObjectDisposedException 取决于在这种情况下终止连接的一端。
是否保证在最后一次成功的 EndRead(和 re-BegingRead)和断开连接之间没有任何数据丢失,特别是如果我在最后这样做?如果不是,如果我结束连接,我是否必须在断开连接时手动 NetworkStream.Read() 以确保没有任何未读的内容?