问题标签 [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 回答
2601 浏览

c# - 来自回调 c# 的未处理异常错误

我有一个 3 层架构,并使用 tcp 套接字在传输层(TCP 客户端)中发送一些数据,这种方法是使用 BeginSend 方法异步进行的。

回调代码 SendData() 如下

当服务器断开连接时,客户端直到它发送一些数据才知道,因此 Connected 属性为 true。然后 remote.BeginReceive() 行抛出我尝试捕获的 SocketException 并抛出自定义异常 (sockCommunicationException)。

但是,当我这样做时,我得到一个未处理的异常。我想通过业务层将此错误冒泡到 UI。当回调方法中引发这样的异常时,它会在哪里引发?

我怎样才能避免这个未处理的异常并将这个异常冒泡到 UI 层。

请帮忙。

提前致谢!

0 投票
1 回答
1918 浏览

c++ - BIO_ctrl_pending() 的异步 OpenSSL 问题

我有一个包装 OpenSSL 的异步客户端和服务器应用程序。一旦创建,它们分别调用 SSL_set_connect_state()/SSL_set_accept_state() 来初始化它们的内部状态。到目前为止,一切都按应有的方式运行。我假设一旦设置了上述状态,就可以开始握手了。我执行以下操作来初始化所说的握手(片段):

这就是有趣的地方。BIO_ctrl_pending() 调用失败,当我对其执行 SSL_get_error() 时,它返回 SSL_ERROR_WANT_READ。然后它显然不会执行我的阅读代码。我在代码片段上方添加了以下行:

现在,当我运行代码时,BIO_ctrl_pending() 返回适当的数量 (210),然后我的代码可以继续从 BIO 读取并启动握手。

我的问题是,这是 OpenSSL 中没有正确设置状态的某种错误吗?还是我错过了什么?

0 投票
1 回答
251 浏览

objective-c - NSTimer 不适用于 AsyncSocket 库

我正在使用 AsyncSocket 库,我尝试创建一个 NSTimer 但它没有触发。当我删除异步套接字代码时,我的计时器开始工作。我很确定 AsyncSockets 是造成这种情况的原因,那么我该如何使用 NSTimers,这可能是什么原因?

0 投票
1 回答
1331 浏览

iphone - 在 iPhone 上使用带有辅助线程的 AsyncSocket

我在 iPhone 上使用 AsyncSocket 与服务器通信。AsyncSocket 基于运行循环,但我的应用程序基于线程。这意味着,我启动一个新线程来写入数据并等待直到在同一个线程上收到响应。但是我不能直接从另一个线程调用 AsyncSocket 的方法,我必须使用:

它确实有效,但我无法从以这种方式调用的方法“writeSomeData:”获得响应,因为 performSelectorOnMainThread 什么也不返回。

writeSomeData: 方法执行以下操作:

我可以通过访问类变量“dataReceived”来获得响应,但此时它的内容发生了变化。

谁能告诉我如何在单独的线程上使用 AsyncSocket (或者通常,如何处理基于运行循环的类),以便如果我调用该类的方法,它会阻塞,直到该方法被执行并收到响应?

谢谢你。

0 投票
1 回答
1908 浏览

c# - .Net Socket:如何更好地实现 AsyncCallback / AsyncWaitHandle

我正在尝试在 C# 中构建一个套接字服务器,我遇到的一个问题是,当我将AsyncCallback传递给我的套接字的BeginReceive方法时,回调被调用得太快了,当我读取 IAsyncResult 的AsyncState属性时,我得到了 null。

我以为我已经通过添加“修复”了这个

但问题仍然存在。谁能阐明我做错了什么?

我的代码如下(略):

0 投票
2 回答
6376 浏览

c# - C# Async TCP Server 矫枉过正?

这确实是一个实施问题,所以我觉得最好从我的具体案例开始。

我有一个 C# 服务器,它从移动客户端异步侦听 TCP 连接。当一个移动客户端连接一个新线程时,客户端会发送一个小的(通常小于 100 字节)文本消息并接收一个类似大小的返回。服务器响应后,关闭连接并结束线程。

当前的基本用法是用户登录,检查内容有时长达 5 分钟,发送少量消息,从而在服务器上快速连续创建新线程,并且它们断开连接仅在几个小时后重新连接。此外,每个用户都有自己的服务器在他们的 PC 上运行,因此大多数服务器在任何给定时间都只会连接一个客户端,在极少数情况下是两个。

现在我遇到了以下错误,现有连接被远程主机强行关闭,这让我想,我做错了吗?

所以我的问题:

  1. 我目前的设置在这里合适吗?
  2. 如果是这样,我应该在发送一条小消息后结束线程还是在给定的空闲时间后保持活动并关闭?
  3. 如果我做的一切都正确,极不可能,我是否应该通过在放弃前简单地重试几次来避免错误?
  4. 第四也是最后,这个错误完全杀死了服务器(服务器是由另一个进程产生的,并且任何未捕获的异常都会杀死它),如果我们已经做到了这一点,并且我的实现是好的,我该如何避免呢?

编辑:

回答这里的一些问题:

  • 在我收到所有数据之前发生异常,但仅在用户快速连续发送多条消息的情况下发生。
  • 我记得最大积压是 5,除非用户正在运行 Windows Server,但是我没有设置我的,我不知道默认值是什么,我会尝试将其显式设置为 5。

异步服务器代码:

0 投票
1 回答
2587 浏览

iphone - AsyncSocket 不调用委托

我在尝试使用 AsyncSocket 时遇到了一个奇怪的问题。在我的应用程序中,我实际上需要同步套接字,因为我自己在不同级别处理后台的所有通信。所以我尝试围绕 AsyncSocket 类 SyncSocket 编写包装器。这是代码:

问题是:AsyncSocket 连接到主机就好了,但我的委托 didConnetToHost 从未被调用。如果我调试 AsyncSocket 代码,我可以看到即使委托设置respondsToSelector失败。看起来有一些奇怪的内存违规或其他东西,但我不知道我在哪里做错了。

有任何想法吗?有没有关于如何将 AsyncSocket 包装为同步套接字的好例子?

PS:要清楚一点:XCode 3.2.5,iPhone Simulator 4.2。

更新:我试图用 SyncSocket 包装它的原因是因为我想从应用程序的业务逻辑中隐藏所有套接字委托的东西。我需要在许多不同的地方使用套接字连接,并且我不想在许多不同的地方实现低级套接字功能(比如检测套接字的状态、接收消息的标头然后接收正文等)。我想要一个简单的界面,我可以打开/发送/接收,而不用担心低级实现。我确实明白网络连接应该在单独的线程中运行,这很好 - 在主线程中制作一个后台工作人员不是问题。

因此,我从 AsyncSocket 存储库中获取了 InterfaceTest 示例作为起点。从那里删除了与 DNS 相关的内容。工作正常。didConnect 被调用,一切都很闪亮。

然后我将我的 SyncSocket 实现添加到项目中,以查看它有什么问题。项目可以在这里下载:http: //dl.dropbox.com/u/6402890/NetworkTest.zip - 可能有人可以告诉我我做错了什么 - 我感觉我没有正确使用线程同步套接字。

如果我在等待循环asyncSocket is Connected和我的内部都使用self.waiting- 它会退出该循环并被didConnect调用(但在循环完成之后)。如果我尝试只使用self.waiting在 didConnect 中设置的我的 -didConnect从不调用并且应用程序挂起。

任何人都可以告诉我有什么问题吗?

0 投票
2 回答
516 浏览

objective-c - 跟踪内存泄漏

我的可可应用程序中存在内存泄漏,我已尽一切可能找到它的所有者,但一直无法找到。几天前,当我实现AsyncSocket框架的 GCD 版本时,泄漏就开始了。我不知道是我自己的代码导致泄漏出现还是库本身。Instruments 不提供良好的回溯。唯一模糊的一件事:

有人可以向我指出进行更高级跟踪或逆向工程等所需的方向吗?

0 投票
1 回答
988 浏览

iphone - AsyncSocket 设置超时

我正在向本地网络设备发送数据。
如果设备处于关闭状态,则会在 75 秒后触发超时。我想通过使用以下代码来减少这个超时:

但 Timeout 参数不会改变行为。特殊值 -1 和 0 似乎也没有效果?

如何设置超时?

0 投票
1 回答
2836 浏览

c# - C# Async Webserver - 如何向客户端发送数据

对于任何有经验的 C# 开发人员来说,这可能是小菜一碟

您在这里看到的是一个示例异步网络服务器

我从网上下载了这个,以便有一个可以使用的基本模型。

基本上我需要做的是将此网络服务器作为计算机中的进程运行。它将一直监听 8080 端口,当客户端计算机发送请求时,该服务器将处理一些数据并将结果作为字符串发送回。

我用这段代码创建了一个小项目(按原样运行),但是当它执行该行时

我得到的只是浏览器中的错误,或者最多是一个空白页面

我怀疑我需要定义要与(消息)一起发送的 HTTP 标头,但我一直在网上搜索这个没有运气

有人愿意帮忙吗?

谢谢!