问题标签 [gcdasyncsocket]

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 回答
315 浏览

iphone - GCDAsyncSocket 并发送 SIP 数据包

我尝试将邀请发送到 SIP 服务器:

里面

然后,当套接字连接时:

这是结果:

但是当我签入 whireshark 时,没有像 SIP 那样检测到数据包。我哪里错了?

在此处输入图像描述

0 投票
1 回答
1455 浏览

ios - GCDAsyncUDPSocket 源地址返回 null

google代码问题镜像:https ://groups.google.com/forum/#!topic/cocoaasyncsocket/grhjZSMLr3U

这是我正在读取响应的代码:

这是发送 udp bcast 的代码:

port 和 bcast addr 分别是 55555 和 255.255.255.255。

控制台输出:

十六进制:

为什么这里的源地址为空?或者为什么它格式不正确?

0 投票
0 回答
696 浏览

objective-c - Objective-C 与僵尸对象崩溃

我已经使用 GCDAsyncSocket 库在 Objective-c 中实现了 JSON-RPC(稍作修改)服务器/客户端。但应用程序在响应请求时崩溃。没有调试僵尸我得到这个错误:

xcode 中的屏幕截图显示错误出现在 GCDAsyncSocket 库的 completeCurrentRead 方法中。 在此处输入图像描述

在调试僵尸时,它会记录以下内容:

2013-02-04 14:36:16.430 JSONRPCTestServer[1367:603] *** -[__NSArrayI release]: 消息发送到释放的实例 0x1005b6fd0

仪器显示了这一点: 仪器

因为当对 rpc 调用的响应是 nsarray 类型时会发生这种情况,我猜它的这个数组是导致错误的。RPC 方法是:

JSON-RPC 标头是:

.m 是:

我只是不知道如何解决这个问题。为什么我总是收到一个 nsarray 错误,但是当我返回一个 nsnumber 时它可以工作?我怎样才能解决这个问题?

0 投票
3 回答
4151 浏览

objective-c - 为什么 GCDAsyncSocket readData 设计为只读一次?

我发现 GCDAsyncSocket 的 didReadData 回调不直观的一件事是,除非您发出另一个 readData,否则它不会再次被调用。为什么要这样设计?期望库的用户启动另一个读取调用以获得回调是否正确,或者这是一个设计缺陷?

例如

0 投票
2 回答
722 浏览

queue - CocoaAsyncSocket / GCDAsyncSocket 在队列上的写入之间添加延迟

我有以下功能:

它工作得很好,除了套接字服务器在两次写入之间需要一秒钟左右的时间才能工作。我想知道是否有人遇到过同样的问题,并且可以阐明如何实现这一目标。谢谢。

0 投票
1 回答
582 浏览

ios - GCDAsyncUdpSocket + Bonjour?(bynamic udp 端口​​)

我正在GCDAsyncUdpSocket用于我的项目,我可以通过这种方式绑定端口,(服务器部分)

但我不想为此提供静态端口号。如何为 UDP 通信获取可用的空闲端口?我要使用 Bonjour 将它作为服务发布?我在正确的轨道上吗?

0 投票
1 回答
1481 浏览

objective-c - Issue Connecting with GCDAsyncSocket with OSX executable

I have the excellent GCDAsyncSocket running perfectly on an iOS app I have developed.

I was just playing around with setting up a Mac OSX command line program that uses the library in a similar way to log to SQLite DB but can't get it to even attempt to connect to host. No errors get generated. The program doesn't crash or anything so don't have an idea about why it's not working. Does anyone have an idea why this won't work?

The console only prints out the following (with no connect/disconnect/read/write logging i.e. the socket delegate methods are not being called):

Here is quite a bit of the code I am using:

main.m

LoggerClass.h

LoggerClass.m

Device.h

Device.m

0 投票
0 回答
2267 浏览

ios - 尝试使用 GCDAsyncSocket 进行缓冲传输

(更新)我正在尝试读取一个大文件(视频或图片)并通过 SOAP 请求将其发送到远程服务器。我需要将数据编码为 Base64 字符串。我正在尝试按以下方式执行此操作:

  • 为将“绕过”base64 编码数据的 SOAP 请求创建一个模板 xml

  • 将 SOAP xml 的第一部分推入缓冲区

  • 打开视频文件并将其编码为块并将每个编码的块推入缓冲区

  • 最后,推送 SOAP xml 的第二部分

为了能够将上述部分“排队”,我正在尝试使用具有缓冲功能的 GCDAsyncSocket。我认为由于 GCDAsyncSocket 在 TCP 级别上运行,我需要自己编写 HTTP POST 标头。所以,有很多我只是模糊理解的活动部分,我可能做错了。但我的插座似乎从来没有起飞,我什至不知道如何调试它。这是我的相关代码,试试看你是否发现任何明显的错误:

套接字似乎总是可以正常连接,我看到使用这个委托方法:

setUpStreamsForInputFile 方法(在上面的第一个代码清单中调用):

现在,前一个方法中的 NSInputStream 设置将向这个委托发送事件:

套接字应该使用此委托将内容输出到日志

但这是随机发生的。例如,有时我看到前 2 个 if 被调用,有时却没有。当我这样做并且它到达第三个“如果”(我正在写入实际编码数据的那个)时,它只写入了 2 或 3 次,仅此而已 - 考虑到文件的大小,我认为次数太少了。我从来没有看到它到达最后一个“if”,它应该写 SOAP xml 的最后一部分。将不胜感激任何帮助!提前致谢。

进一步更新 (3/19/13)

今天测试套接字时,我根本不再收到写入事件,这告诉我它是随机的,我做错了什么。今天连接打开,但在某个时候超时,正如我使用以下委托方法所看到的:

返回

socketDidDisconnect:withError: "错误域=NSPOSIXErrorDomain Code=60 "操作超时" UserInfo=0x1cd89b00 {NSLocalizedFailureReason=connect() 函数出错,NSLocalizedDescription=操作超时}"

虽然我仍在上面的流委托中运行 Base64 数据的写入。

0 投票
1 回答
1116 浏览

cocoa-touch - 即使断开连接,GCDAsyncSocket 也无法多次接受 OnPort

我希望能够关闭当前侦听端口的套接字,然后返回到它并重新建立对该端口的侦听。我无法这样做,因为在另一个服务器侦听套接字上的第二个 acceptOnPort 调用总是以错误结束(地址已在使用中)。如何关闭侦听套接字并重新建立一个新的?

0 投票
0 回答
1184 浏览

iphone - GCDAsyncSocket 写入超时不起作用

我试图在使用 GCDAsyncSocket 时设置写操作超时。代码非常简单,如下所示。

然后我在我的 Mac 上禁用 Internet 连接并等待写入超时发生,但没有任何反应。我没有GCDAsyncSocketWriteTimeoutError像我应该的那样因错误而断开连接。

我还验证了我的服务器在我关闭 Internet 连接后按预期停止接收消息。

我查看了源代码,发现负责触发写入超时事件的 writeTimer 总是被取消(调用函数endCurrentWrite)。追溯到定时器被取消的地方,我最终得到了以下代码行。

write 系统调用总是返回我发送的字节总数,就好像套接字设法发送数据一样,尽管没有 Internet 连接。这是合乎逻辑的吗?

有没有人遇到过同样的问题或看到过类似的行为?或者有没有人设法为 GCDAsyncSocket 设置写超时?

非常感谢。