问题标签 [asyncsocket]

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 投票
2 回答
1838 浏览

iphone - 锁定手机后 AsyncUDPSocket 断开管道,应用程序在后台暂停

我在我的 iPhone 应用程序中使用AsyncUDPSocket第三方库,并且在大多数情况下它工作得很好。我有一个AsyncUDPSocket用于所有网络流量的单例实例。我的应用程序在后台注册了位置跟踪,并且在后台运行时将唤醒并通过网络发送位置更新数据包。这一切都在后台,前台,手机锁定或解锁中运行,除非我执行以下操作:

  1. 启动我的应用
  2. 在我的应用设置中禁用位置跟踪(因此没有后台唤醒)
  3. 按下主页按钮(应用程序进入后台,套接字与应用程序的其余部分“冻干”)
  4. 锁定手机
  5. 解锁手机
  6. 简历应用
  7. 尝试重新启动跟踪并从套接字发送一些东西。我一尝试,就会收到SIGPIPE/EPIPE错误并且应用程序崩溃。

我认为处理此问题的最佳方法是在应用程序退出且未启用后台跟踪时关闭并释放套接字,但是当我尝试[socket close][socket release]打开时AsyncUDPSocket,我会收到各种EXC_BAD_ACCESS错误。我已经向开发团队提交了一个错误,但想知道这里是否有人可以就如何SIGPIPE完全避免错误或其他方式在不释放套接字的情况下保持套接字存活提出一些想法。谢谢。

0 投票
3 回答
9972 浏览

objective-c - CocoaAsyncSocket 的读写委托不是触发和代码组织

我正在尝试使用 cocoaasyncsocket 库附带的 echo 服务器示例的修改版本来执行以下操作:

1) 打开与充当服务器的 python 脚本的连接
2) 发送数据 // 有效,但委托不触发
3) 接收数据 // 委托不触发
4) 断开连接 // 显然不断开连接仍然在我的线程中

目前我在 didFinishLaunchingWithOptions 委托中打开一个连接,然后尝试在 didConnectToHost 委托中发送数据。然后我尝试读取从客户端返回的数据,然后断开连接。

我能够打开连接并发送数据(服务器验证为已接收),但 didWriteDataWithTag 委托永远不会触发。但是,服务器接收数据。然后服务器会返回一些数据,但 didReadData 也不会触发。

除了读/写委托没有触发的事实之外,我组织代码的方式似乎不正确,但我不确定这在事件驱动系统中的外观与运行循环相比如何(I'我是事件驱动的东西+网络的新手)。如果我有一系列动作,其各自的完成是由他们的代表触发的,那么代表是否应该共享某种消息 - 即我们收到“xxx”消息,写回“yyy”?我希望有一个功能来管理所有这些。有这样做的规范方法吗?

IPhoneConnectTestAppDelegate.m(片段)

tcpserver.py

0 投票
1 回答
573 浏览

asyncsocket - 在所有情况下都必须调用 EndRead() 吗?

与使用(双向)NetworkStream 的异步 IO 相关,MSDN表示“每次调用 BeginRead 都必须调用一次 EndRead”。

即使在 EndRead() 将引发异常的情况下,例如在发出 BeginRead() 后 NetworkStream 已关闭的情况下,这是否也是如此?

我不希望抛出异常的开销,但我也不希望泄露 BeginRead() 保留的操作系统宝贵资源。

我也知道流可以在流状态测试和条件 EndRead() 之间关闭,但是如果在我们知道流已关闭时可以省略 EndRead(),这将节省大多数情况下的异常处理.

我做错了吗?

谢谢!

0 投票
2 回答
2721 浏览

c# - 在 Windows Server 2008 R2 上使用异步套接字会导致 100% 的 CPU 使用率

我有一个相当通用的 C# 套接字服务器,它使用套接字类的异步方法 - BeginAccept()、BeginReceive() 等。过去 4 年,该服务器在许多运行 Win Server 2003 的客户站点上运行良好。最近我将其安装在 64 位 Windows Server 2008 R2 服务器上。在第一个客户端连接并在接受处理程序中发出 BeginReceive() 和 BeginAccept() 调用之前,一切看起来都很好。发生这种情况时,CPU 使用率会飙升至 100% 并保持这种状态,直到我关闭侦听套接字。

不确定这是否重要,但服务器正在虚拟机中运行。

已经做了很多测试,但似乎没有任何帮助。使用 Process Explorer,我可以看到在 BeginReceive()/BeginAccept() 调用后不久启动了两个线程,它们是消耗处理器的线程。不幸的是,我无法在我的 Win7 64 位工作站上重现此问题。

我做了很多研究,到目前为止,我发现的只是以下两篇 KB 文章,它们暗示 Server 2008 R2 可能存在 TCP/IP 组件问题,但它们仅作为热修复程序提供:KB2465772 和KB2477730。在我更确定他们会解决问题之前,我不愿意让我的客户安装它们。

有没有其他人有这个问题?如果是这样,您必须采取什么措施来解决此问题?

这是我认为导致这种情况的方法:

0 投票
6 回答
13575 浏览

iphone - GCDAsyncSocket - 不接收数据 - AsyncSocket 工作正常

我使用 GCDAsyncSocket 让 iPhone 客户端连接到服务器。服务器在 Windows 服务器上运行 .Net。连接很好,它也可以很好地发送数据。

然后我告诉客户在发送后直接进入接收...

我也有这个设置来接收:

并且:

如果我等待超时,则会调用超时方法。

如果我从服务器发送数据,则不会调用超时,所以我假设客户端已经看到了一些东西,但在客户端没有任何迹象。

我还补充说:

希望我能看到一个部分数据包,但这也不会被触发。

正如我上面提到的,如果我从服务器向客户端发送一些东西,超时不会触发。但是,如果它没有收到终止符,我会认为它也会超时。我也尝试用 3 的长度阅读,但这没有任何区别。

GCDAsyncSocket 是问题所在。AsyncSocket 似乎工作正常。

也许它的初始化是错误的?

dispatch_queue_t mainQueue = dispatch_get_main_queue();

asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:mainQueue]

任何想法我做错了什么?

我为此在护目镜代码上发了一个帖子,但没有任何活动,所以不确定我是否会得到答案。

理想情况下,如果有人有一个接收工作的示例代码,那就太好了!谢谢你!

0 投票
2 回答
1452 浏览

tcp - 类纳格尔问题

所以我有这个实时游戏,使用SFML library禁用 nagle 的 C++ 服务器和使用asyncsocket的客户端也禁用 nagle。我每 1 秒发送 30 个数据包。从客户端发送到服务器没有问题,但是从服务器发送到客户端时,一些数据包正在迁移。例如,如果我在完全不同的数据包中发送“a”和“b”,客户端会将其读取为“ab”。它一次只发生一次,但它在游戏中造成了真正的问题。

所以我该怎么做?我该如何解决?也许它是在服务器中的东西?也许操作系统设置?

需要明确的是:我没有使用 nagle,但我仍然有这个问题。我在客户端和服务器中都禁用了。

0 投票
4 回答
959 浏览

c# - 套接字编程:服务器

好的,所以我一直在尝试自学一些套接字编程。我为自己编写了一个带有异步服务器的小 C# 应用程序,我了解其中的大部分内容,除了以下内容:

所以服务器有一个监听连接的端口,然后当它接收到一个连接时,它会创建一个不同的套接字来进行通信。这就是我不明白的......当理论上客户端不知道为这个新连接选择了哪个端口时,客户端和服务器之间如何进行通信?

感谢您的所有回答

编辑:据我了解,侦听线程在默认端口上侦听,但是所有消息随后都在每个客户端的不同套接字上处理?

再次编辑:你们如何误解我的问题。我了解正常的套接字通信。我的问题是异步服务器的侦听套接字与连接套接字不同。IE。

  1. 服务器侦听默认端口
  2. 客户端尝试连接。
  3. 服务器接收请求。
  4. 然后服务器在客户端和服务器之间创建一个通信套接字并继续侦听默认端口。

我的问题是在最后一步。客户端现在如何知道如何在新套接字上进行通信?这是一些示例代码 http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx

0 投票
1 回答
861 浏览

c# - Control.Invoke 方法后的异步套接字发送问题

我有一个使用异步套接字的客户端/服务器应用程序。我有一个从服务器端向客户端发送数据的方法,客户端有一个处理这些数据和控制客户端表单控件的方法。

由于使用异步套接字,我需要使用Control.Invoke方法来访问主线程。但是我遇到了一个问题——在我使用Control.Invoke它之后,开始向服务器端发送数据问题。它进入 socketClient.Send(byteArray); 但不向服务器发送数据。如果我不使用 Invoke.Method,我将无法控制客户端表单控件:(

我必须做什么?

好的,我发现了我的问题,但不是关于 Control.Invoke 它的套接字数据传输问题。但我无法解决它。当我重复使用 socketClient.Send() 方法时,只有第一个 socketclient.Send() 正在工作。这是我的代码;

// 当客户端连接时,此方法正在工作。

//当客户端向服务器发送消息时,此代码块正在工作。

//这个方法正在处理客户端的消息

//这个代码块是从客户端工作的,问题从这里开始,有2个Send方法在工作,但只有第一个在服务器上执行。

0 投票
1 回答
2677 浏览

c# - C# 使用 NetworkStream 进行异步读写

我已经构建了一个服务器,它接收来自客户端的请求并给出取决于请求类型的响应。如果请求类型是流式传输,则服务器必须发送数据数组。在服务器的流式传输数据时,客户端可能会发送停止请求以停止流式传输。如果请求和响应在同一 TCP 连接上传输,则服务器仅在所有数据完成流式传输到客户端时才会收到停止请求。我想我必须使用异步写入来解决这个问题。这是我的代码:

首先,我创建一个循环以接收来自客户端的连接:

在 ClientInteraction 类的 Process 函数中:

在 HandleRequest 函数中,如果请求是 STREAM,我会以数组的形式向客户端发送数据:

使用此代码,我与客户端连接,向客户端发送数据。但是在所有数据都流式传输之前,我仍然无法收到停止请求。请告诉我解决问题的正确方法。谢谢你。

0 投票
1 回答
93 浏览

c# - 服务器应用程序在收到消息时关闭

好吧,我正在制作一个客户端-服务器应用程序,我可以很好地向我的客户端发送消息,但是当我以相反的方式(客户端到服务器)这样做时,服务器应用程序就会关闭,关于如何解决这个问题的任何帮助?

在做了一些断点之后,我意识到它在到达这部分后关闭,当它尝试将它附加到 textArea 时,它会在没有错误的情况下关闭。

有想法该怎么解决这个吗?我猜想与线程有关,但不确定为什么它会关闭。