问题标签 [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 投票
4 回答
2611 浏览

c - 只有一个 write() 调用通过套接字连接发送数据

第一个stackoverflow问题!我已经搜索过......我保证。我还没有找到任何答案来解决我的困境。我有一个……至少可以说是一个严重恶化的问题。长话短说,我正在为一款游戏开发基础架构,其中移动应用程序(Android 应用程序和 iOS 应用程序)使用套接字与服务器通信,将数据发送到数据库。后端服务器脚本(我称之为 BES 或后端服务器)有几千行代码。本质上,它有一个 main 方法接受到套接字的传入连接并将它们分叉,以及一个从套接字读取输入并确定如何处理它的方法。大多数代码位于从数据库发送和接收数据并将其发送回移动应用程序的方法中。除了我添加的最新方法外,它们都工作正常。此方法从数据库中抓取大量数据,将其编码为 JSON 对象,然后将其发送回移动应用程序,移动应用程序也会从 JSON 对象中对其进行解码并执行它需要执行的操作。我的问题是这个数据非常大,而且大多数时候不会在一次数据写入中通过套接字。因此,我在套接字中添加了一个额外的数据写入,通知应用程序它即将接收的 JSON 对象的大小。但是,在此写入发生后,下一次写入会将空数据发送到移动应用程序。我在套接字中添加了一个额外的数据写入,通知应用程序它即将接收的 JSON 对象的大小。但是,在此写入发生后,下一次写入会将空数据发送到移动应用程序。我在套接字中添加了一个额外的数据写入,通知应用程序它即将接收的 JSON 对象的大小。但是,在此写入发生后,下一次写入会将空数据发送到移动应用程序。

奇怪的是,当我删除发送 JSON 对象大小的第一个写入时,JSON 对象的实际发送工作正常。它非常不可靠,我必须希望它一口气发送所有内容。更奇怪的是,当我将第二次写入发送的数据的大小设置为一个巨大的数字时,iOS 应用程序会正确读取它,但它会将数据放在一个空数组的中间。

世界上到底发生了什么?非常感谢任何见解!下面只是我在服务器端的两个写命令的基本片段。

请记住,在此脚本中的其他任何地方,读取和写入都可以正常工作,但这是我背靠背执行 2 次写入操作的唯一地方。

服务器脚本位于使用 Berkeley 套接字的原生 C 语言的 Ubuntu 服务器上,而 iOS 使用称为 AsyncSocket 的包装类。

移动应用程序进行了两次读取调用,并且outputMessage很好,但returnData始终只是一堆空数据,除非我覆盖sizeof(returnData)到一些非常大的数字,在这种情况下,iOS 将在其他空数据的中间接收数据对象(确切地说是 NSData 对象)。还需要注意的是,我在 iOS 端的 AsyncSocket 类中使用的方法读取数据的长度达到了它从第一次写入调用接收到的长度。因此,如果我告诉它读取,比如 10000 字节,它将创建一个该大小的 NSData 对象,并在从套接字读取时将其用作缓冲区。

非常感谢任何帮助。提前谢谢大家!

0 投票
2 回答
1116 浏览

c# - .NETCF 异步 TCP 套接字正常关闭问题

我有一个 TCP 客户端/服务器应用程序通过 ActiveSync 连接与 Windows CE 设备进行通信。客户端和服务器都使用异步套接字(即Socket.Begin*andSocket.End*函数)。当客户端和服务器都在我的桌面上运行时,一切都按预期运行,但是当客户端在通过 ActiveSync 连接的 Windows CE 设备上运行时,SocketException调用后我总是在 ReceiveCallback 上得到一个Socket.Shutdown(当设备启动断开连接时) )。完整的例外是:

如果服务器(在桌面上运行)启动断开连接,一切似乎也能正常工作。关于如何避免这种情况,我有几个想法,包括禁止设备启动断开连接并在启动断开连接后忽略所有异常。但是,我想知道为什么会发生这种情况以及是否有更好的处理方法。

Disconnect 和 ReceiveCallbacks(在服务器和客户端上操作相同)是:

0 投票
1 回答
1676 浏览

java - AsyncSocket 可以连接到 java Socket 服务器但不能写入数据

每次我调用 upLoad,Java 控制台打印接受,但没有别的,数据传输了吗?

我将writedata调用改为didConnectToHost,现在客户端说数据已经传输了,但是如何在Java Server控制台中显示这些数据呢?

这是我的 Java 服务器代码:

这是我的 iPhone 客户端代码:

0 投票
1 回答
1528 浏览

iphone - AsyncSocket 委托方法调用不正确?

我正在使用 AsyncSocket 类通过本地网络将相当大的图像从 iPhone 传输到 Mac。在标头中,didReadData 委托方法声明如下:

它说当套接字完成读取数据时将调用此方法。但是这个方法被调用了很多次,每次数据长度都会增加。我怎么知道下载何时完成?我的意思是在前几个字节中发送数据的长度吗?

0 投票
1 回答
1355 浏览

java - java中的异步套接字?

如何在 java 中实现 AsyncSocket(特别是在 android 上)?

0 投票
2 回答
1440 浏览

iphone - ios + 使用来自应用程序委托的 asynudpsocket

我使用 AsynUDPSocket 类创建了一个简单的应用程序。它侦听来自 UDP 客户端的简单文本消息。

当我将相关代码放入视图控制器时,一切正常。但是当我在应用程序委托中尝试相同的操作时,我的应用程序崩溃了。几天前,这件事在应用程序委托中运行良好。现在我不知道出了什么问题。

我使用了这篇文章中的代码 。有人可以详细说明吗?

编辑:代码

我的 App Delegate 的 .h 文件内容

我的 App Delegate 的 .m 文件内容

编辑:崩溃日志

谢谢,安杰洛。

0 投票
2 回答
2730 浏览

c# - 相当于 C# 异步套接字中的 Peek?

我习惯使用同步套接字。为了处理尚未完全到达的消息,我将前 4 个字节设置为消息的预期长度。然后我会Socket.Receive(tcpRecv, 1024, SocketFlags.Peek);在不将其从缓冲区中拉出的情况下查看消息。如果所有这些都在那里,我会提取数据。如果不是,我会把它留在那里。我设计了我的协议,使任何消息都不会超过 1024 字节。

在异步套接字中,我看不到查看数据的方法。有没有办法做到这一点?有没有比偷看数据更好的方法呢?

谢谢。

-缺口

0 投票
1 回答
160 浏览

silverlight - Silverlight tcp 套接字从不第二次回调,除非我在 connectasync 调用上设置断点

我有一种尝试连接的方法。我目前正在测试连接失败。如果失败,则向用户提供重试按钮。如果我按下它,m_tcpSocket.ConnectAsync(m_connectArgs); 再次被调用,但我从未收到回调。

但是,如果我在 ConnectAsync 调用处设置断点,则会发生回调。

当在 Visual Studio 中击中断点时,我是否需要明确地进行一些清理工作?

谢谢你。

-缺口

0 投票
1 回答
3171 浏览

objective-c - 使用 NSNetService 连接到服务器但失败 - 自动套接字断开连接?

新的更简单版本的问题:

我正在尝试使用 Objective-C 客户端连接到 Bonjour 设备并与之通信,但在解析服务(服务器)时遇到了问题。最初我试图做一个更复杂的例子,但我发现即使指定了端口/ip,基本的套接字连接也不起作用。

我使用 cocoaAsyncSocket 库拥有最简单的代码:

这是我要连接的服务器(Python 脚本):

服务器永远不会看到传入连接。在客户端,错误变量具有值或某些东西——没有我所期望的。请帮忙?

OLD(更复杂的版本,使用相同的服务器):

我的调试输出基本上说服务已解决......然后我立即断开套接字。同时我的服务器坐在那里,没有看到传入的连接。

当我获得初始连接并打印出服务的名称时,我已经使用调试器进行了检查 - 然后它挂起,直到我按下继续,然后我立即断开套接字???

我对 Objective-C 和事件驱动编程非常陌生,所以也许我处理错了什么?我很感激任何建议!

客户端(调试器)输出:

服务器输出:

客户端代码(ClientController.m,基本上来自http://www.macresearch.org/cocoa-scientists-part-xxix-message):

0 投票
1 回答
18667 浏览

.net - 如何处理异步套接字中的超时?

我有一个代码,它使用异步套接字向客户端发送消息并期待它的响应。如果客户端在指定的内部没有回复,它会认为超时。Internet 上的一些文章建议使用 WaitOne,但这会阻塞线程并推迟使用 I/O 完成的目的。

在异步套接字中处理超时的最佳方法是什么?