gpt4 book ai didi

objective-c - 我的套接字代码有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:43 24 4
gpt4 key购买 nike

我正在开发我的 Android 应用程序的 iOS 版本,它不断地通过常规 TCP 连接向服务器发送一些二进制数据。虽然 Java 代码工作正常,但我的纯 C 代码却不行——在第一批数据发送到服务器后连接中断。我设法使用 CFNetwork 框架重新实现了 Java 解决方案,但是我的 C 代码仍然是一个问题...

C 代码(错误检查和无趣的代码被删除):

mSocket = socket(AF_INET, SOCK_STREAM, 0);
//...
connect(mSocket, (struct sockaddr *)&sin, sizeof(sin));
int keepalive = 1;
int res = setsockopt(mSocket, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive,
sizeof(int));

int set = 1;
setsockopt(mSocket, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));

unsigned char buffer* = //...;
int ret = send(mSocket, buffer, bufferLen, 0); //handshake with server, runs fine

while(/*there is new data*/) {
buffer = new_data(); //some fake method
ret = send(mSocket, buffer, bufferLen, 0); //On the second iteration
//write returns -1
}

但是,这个基于 CFNetwork 的 Objective-C 代码工作得很好......

Objective-C 代码:

 CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, 
host,
port,
&readStream,
&writeStream);
CFWriteStreamOpen(mServerWriteStream);

while(/*there is new data*/) {
NSData* data = //....
int wroteBytes = CFWriteStreamWrite(mServerWriteStream, [data bytes], [data length]);
}

所以我对我在 C 代码中做错了什么感到困惑,并且会感谢任何提示

谢谢

最佳答案

如果您需要常规的 TCP 连接,您需要使用此类协议(protocol)创建套接字。而不是:

mSocket = socket(AF_INET, SOCK_STREAM, 0);

您应该将其创建为:

#include <netinet/in.h>
mSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

在我的系统上 IPPROTO_TCP 被定义为 6 而不是 0。我怀疑你有类似的东西。

关于objective-c - 我的套接字代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com