问题标签 [socketasynceventargs]

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.

0 投票
1 回答
902 浏览

.net - 开始/结束与 1000 个客户端的 socketasynceventargs

我想知道哪种异步类型在开发速度和稳定性方面都是最好的。我正在编写一个必须支持 1000 个并发客户端的概念验证网络应用程序。

每个客户端每秒发送大约 5 个 30 字节的数据包。服务器每秒发送大约 5 个 200 字节的数据包。

我从早期使用阻塞套接字的测试中获得了这些数字。我认为我应该使用高吞吐量的 SocketAsyncEventArgs 原因,但这也需要更长的时间来开发。

谢谢

0 投票
1 回答
1351 浏览

c# - SocketAsyncEventArgs 中的发送函数

我正在开发一个 C# 客户端/服务器应用程序并使用 SocketAsyncEventArgs 类。我可以从客户端发送一条消息,我可以通过服务器接收(并直接回答),但我不能从服务器“随意”发送。这是我为发送创建的一些代码,有没有人可以看到我的错误?如果您查看下面的代码,我的 handleSend 中的一切看起来都很好(消息看起来正确并且 t.Connection.SendAsync(completeArgs); 被调用,但客户端没有显示任何内容......(除了直接答案我得到...)

服务器代码:

客户代码:

0 投票
0 回答
979 浏览

.net - 如何使用 SocketAsyncEventArgs 通过代理将数据从客户端中继到服务器?

我正在开发一个接受来自多个客户端的连接的代理。代理检查来自客户端的有效令牌,如果找到令牌,它允许客户端连接到服务器。

我正在使用此链接中的 SocketAsyncEventArgs、BufferManager 和其他详细信息

代码如下。

我正在使用 acceptEventArgs 接受来自客户端的新连接,并使用 connectEventArgs 连接到实际服务器。如何将接收到的数据从 acceptEventArgs (AcceptSocket) 发送到 connectedEventArgs (ConnectedSocket)

//接受套接字后的代码

私有无效 ProcessAccept(SocketAsyncEventArgs acceptEventArgs){

0 投票
0 回答
621 浏览

tcp - 当服务器监听 80 时,客户端在 3 次握手后发送 RST,更改端口就可以了

我基于 SocketAsyncEventArgs (C#) 而不是商业软件编写了一个定制的 HTTP 服务器。当服务器在端口 8080/12345 上侦听时……没问题。但仅在端口 80 上,当浏览器启动与 HTTP 请求的连接时,它看起来像这样:

  • 2785: [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
  • 2786: [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
  • 2787: [ACK] Seq=1 Ack=1 Win=65700 Len=0
  • 2788: [RST] 序列=1 赢=65536 列=0
  • 3538: HTTP 767 GET /push_push.do?imei=356708041124742&simno=4600230...等等等等

注意,当客户端发送像“socket.Send(http_bytes);”这样的HTTP请求时,TCP报文No.2788[RST]和No.3538[Normal HTTP request]是连续发送的。

=========================

请给我一个建议:

  • [RST] 是如何产生的以及如何避免它?
  • 为什么监听端口会影响?
0 投票
1 回答
356 浏览

c# - SocketAsyncEventArgs 和每秒很少接受

我正在使用 SocketAsyncEventArgs,我每秒只能执行几次接受(我不知道为什么)。

如何最大化每秒接受的数量?我应该多次调用 Accept(null) 吗?

代码:在监听套接字上调用 Listen 后,我调用 Accept(null),这是我的代码:

0 投票
1 回答
313 浏览

c# - SocketAsyncEventArgs 以及对 Socket 的混合异步和同步调用

是否可以在 saea.AcceptSocket.ReceiveAsync 完成后调用 saea.AcceptSocket.Send?(saea == SocketAsyncEventArgs)

调用 saea.AcceptSocket.Send 后再次调用 saea.AcceptSocket.ReceiveAsync 可以吗?

实际上,我希望我的接收是异步的,而我的发送(与接收相比是 1/10000)是同步的。

0 投票
1 回答
1041 浏览

c# - 在这种情况下是否值得汇集 SocketAsyncEventArgs 以供重用?

在我的场景中,有许多客户端的 tcp 套接字连接到服务器。来自所有套接字的服务器 ReceiveAsync() 并且当调用没有错误的回调时,解析接收到的数据。如果一个socket接收到的数据是某种类型的消息,receive回调会循环SendAsync()到所有其他socket,然后再开始ReceiveAsync()。所以对于一个socket,它有机会在很短的时间内被许多其他Receiver的回调调用SendAsync()。我尝试通过 waitone 信号量同步 Sendings 并在发送 IO 完成后释放一个信号量,这样我每个套接字只能使用一个 SAEA obj,但这可能会导致接收器在发送循环中的回调阻塞。所以我取消了信号量,并为每个套接字的发送方法汇集了一些 SAEA 对象。

另一个问题是,如果我将可重用的 SAEA 池化,SAES.Buffer 会产生内存碎片吗?在池化 SAEA 之前调用 SAEA.SetBuffer(null,0,0) 方法可以避免内存问题吗?

0 投票
1 回答
8470 浏览

c# - 使用 SocketAsyncEventArgs 每秒接收 20 次

TCP 服务器是使用 SocketAsyncEventArgs 开发的,它是作为 Windows 服务的异步方法。我在 Main 的开头有这 2 行代码:

并且两者都返回 true(记录返回值)。现在有 2000 到 3000 个客户端开始向该服务器发送消息,并且它开始接受连接(我计算了连接数,它符合预期 - 有一个连接池)。服务器进程的线程数将增加到 ~2050 到 ~3050。到现在为止还挺好!

现在有一个 Received 方法,该方法将在 ReceiveAsync 返回 true 后或通过 SocketAsyncEventArgs 的 Completed 事件调用。

问题就从这里开始了:无论连接了多少客户端,发送了多少消息,Received 最多在一秒钟内被调用 20 次!随着客户数量的增加,这个数字(20)下降到约 10。

环境:在同一台机器上模拟 TCP Server 和客户端。我在 2 台机器上测试了代码,一台有 2 核 CPU 和 4GB RAM,另一台有 8 核 CPU 和 12GB RAM。没有数据丢失(还),有时我在每个接收操作中收到超过 1 条消息。没关系。但是如何才能增加接收操作的数量呢?

关于实现的附加说明:代码很大,包含许多不同的逻辑。总体描述是:我有一个 SocketAsyncEventArgs 用于接受新连接。它工作得很好。现在,对于每个新接受的连接,我都会创建一个新的 SocketAsyncEventArgs 来接收数据。我把这个(为接收创建的 SocketAsyncEventArgs)放在一个池中。它不会被重用,但它的 UserToken 被用于跟踪连接;例如,那些断开的连接或那些 7 分钟没有发送任何数据的连接将被关闭和处置(SocketAsyncEventArgs 的 AcceptSocket 将被关闭(两者)、关闭和处置,SocketAsyncEventArgs 对象本身也是如此)。

0 投票
1 回答
164 浏览

udp - UDP 空缓冲区 ReceiveAsync

我使用了这个线程中的 SocketClient.cs和 msdn 中的非常相似。

有人能告诉我为什么收到数据包后缓冲区是空的吗?

我在 Windows 8 上有主机应用程序,然后我从带有某种信息的电话数据包发送。然后主机用新数据包回复我。方法“接收”接收空信息。缓冲区为空。如何解决?

0 投票
1 回答
554 浏览

c# - 使用 Windows Phone 套接字接收大文件

我正在使用套接字处理从桌面应用程序到 Windows 手机应用程序的 sendig 文件。

我已经开发了桌面套接字服务器应用程序和 Windows Phone 应用程序(套接字客户端),两者都适用于小于 1MB 的文件,这意味着我可以将小于 1MB 的文件从桌面应用程序传输到 Windows Phone 应用程序。

现在我的问题是发送大文件导致应用程序崩溃,我已经调试了应用程序,但它会在一些迭代后挂起。

请检查以下代码片段以了解 Windows Phone 端的文件接收逻辑。

代码 :

请尽快回复...

谢谢。