- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我无法连接到 Java 套接字服务器。我知道服务器正在工作,因为我通过 Java 套接字连接。我正在使用 CocoaAsyncSocket 库从 iOS 设备建立客户端连接。我试过以下方法,
[socket connectToHost:@"XXX.XXX.X.XXX" onPort:9090 error:&err]
方法,但服务器永远不会看到客户端连接,客户端 (CocoaAsyncSocket) 认为它已连接。所以那不行,然后我意识到还有另一种连接方法可用。
所以我想我应该改用 connectToAddress 方法。 I've used this post作为我当前代码的引用,但我仍然遇到错误,我不确定为什么。与我的版本和建议版本的唯一区别是他们使用 sa_len 的长度,我遇到了一个错误,xCode 想将其切换为 sin_len,所以我做到了。我对直接套接字连接真的很陌生,所以请多多包涵。
GCDAsyncSocket *socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
struct sockaddr_in ip4addr;
ip4addr.sin_family = AF_INET;
ip4addr.sin_port = htons(9090);
inet_pton(AF_INET, "XXX.XXX.X.XXX", &ip4addr.sin_addr);
NSData *discoveryHost = [NSData dataWithBytes:&ip4addr length:ip4addr.sin_len];
NSError *err = nil;
if (![socket connectToAddress:discoveryHost error:&err])
{
NSLog(@"I CANNOT CONNECT!");
}
else
{
NSLog(@"IM CONNECTED!");
}
连接失败,错误是,
Error Domain=GCDAsyncSocketErrorDomain Code=2 "A valid IPv4 or IPv6 address was not given" UserInfo=0x8bac880 {NSLocalizedDescription=A valid IPv4 or IPv6 address was not given}
最佳答案
我变了
NSData *discoveryHost = [NSData dataWithBytes:&ip4addr length:ip4addr.sin_len];
到
NSData *discoveryHost = [NSData dataWithBytes:&ip4addr length:sizeof(ip4addr)];
它修复了我遇到的错误。但是,我无法通过 connectToHost 方法连接的原因是我的服务器套接字代码。我有两个接受连接的服务器套接字。我注释掉了第二个,它工作得很好。我猜这是因为线程被第二个套接字或其他东西锁定了。
关于ios - 为 CocoaAsyncSocket 获取无效的 IPv4 地址创建 sockaddr_in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21635917/
因此,我试图读取二进制文件,其中字节以网络字节顺序排列。在文件中,它们包含为套接字编程创建结构sockaddr_in所需的信息。这些文件的排列方式是,前4个字节代表IPv4地址,后2个字节代表端口号(
我想做一个小型的ECHO服务器,但是这段代码在通过sendto时一直返回-1,我不知道为什么。 它总是传递到 perror 并打印地址族不支持谁能解释一下为什么? 这是我的代码: sock = soc
我现在正在用 C 语言创建一个服务器/客户端系统,我在客户端部分遇到了一些麻烦。据我所知,我需要使用 sockaddr_in 才能连接到服务器。但是,我每次都遇到段错误。我相信 sockaddr_in
我正在解决一些静态分析缺陷,而导致我出现问题的就是这个缺陷。 SOCKADDR_IN m_stLclAddr; SOCKADDR_IN is a member of the WinSock API 缺
我有一段代码,很久以前在某个环境下工作过。我很确定它是一台 FreeBSD 机器,所以我得到了 FreeBSD 8.3,我正在尝试制作这个文件,但它不工作。 当我尝试编译它时,它会提示: f.c: I
我正在遵循 beej 的网络指南,它进展得非常好,因为我对所有内容都非常了解,而且他解释得很好。但是,当我想测试他向我展示的一些很酷的东西时,它不会起作用! :( 我不确定 sockaddr_in 到
这是 netinet/in.h 中定义的 internet(IPv4) 套接字地址结构 struct sockaddr_in { uint8_t sin_len; s
作为接收struct ifreq *ifr参数的函数的一部分,如果我声明struct sockaddr_in name;,程序会编译,但如果我命名变量struct sockaddr_in ifr_ad
我正在创建一个小型的发送方和接收方应用程序,它将其名称广播到多播组中的所有其他应用程序,同时还接收其他应用程序的名称。 我想我现在已经完成了发送部分,如下所示: if (sendto(sock, me
目前我正在构建一个点对点网络架构,并且正处于创建一个接收函数的阶段,该函数将接受来自网络上多个客户端的消息。本质上,当 recvfrom 函数被调用时——最近向主客户端发送消息的客户端的地址被加载到一
对于我的一门类(class),我必须对服务器和客户端进行编程,并且我们获得了一些示例代码以供使用。这是我感到困惑的片段: main() { int sock, sock_current, c
我在 C 编程方面相对较新,尤其是在套接字编程方面,但我花了很多时间试图帮助自己解决这个问题,但没有找到任何东西,我希望有人能够提供帮助。所以这就是问题所在(我只写了我有问题的那一行) #includ
在作为connect() 的函数中,最后一个参数是sockaddr_in 结构的大小。 很好,但是 sin_zero 未使用(系统不会像我在 stackoverflow.com/questions/2
如果我需要获取 IP 的主机名,我应该使用哪个端口? getnameinfo() 从哪里获取主机名? struct sockaddr_in sa; sa.sin_family = AF_INET
无论我在哪里看,我都会看到以下代码: struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INE
我尝试使用 struct sockaddr_in sin; 但如果我使用它,我会得到 Variable has incomplete type 'struct sockaddr_in' 和 Forw
我在谷歌上搜索了一下,有人说“为了与 struct sockaddr 保持相同的大小”。但是内核不会直接使用 sockaddr(对吧?)。使用时。内核会将其转换回原来的样子。那么为什么需要零填充? s
var sa_tab:[sockaddr?] = [sockaddr](repeating: sockaddr(), count: Int(RTAX_MAX)) let addr:sockaddr =
我是 C 和套接字编程的新手,仍然在 sockaddr_in 中苦苦挣扎结构体: struct sockaddr_in { short sin_family; /*
当我初始化变量时,我会这样做。 int i = 0; char *myText = NULL; 那么,如何初始化struct sockaddr_in类型变量? struct sockaddr_in a
我是一名优秀的程序员,十分优秀!