我想创建套接字来连接多个设备,我有一个接受回叫功能
void AcceptCallBack(
CFSocketRef socket,
CFSocketCallBackType type,
CFDataRef address,
const void *data,
void *info)
{
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFIndex bytes;
UInt8 buffer[128];
UInt8 recv_len = 0, send_len = 0;
/* The native socket, used for various operations */
CFSocketNativeHandle sock = *(CFSocketNativeHandle *) data;
/* The punch line we stored in the socket context */
char *punchline = info;
/* Create the read and write streams for the socket */
CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock,
&readStream, &writeStream);
if (!readStream || !writeStream) {
close(sock);
fprintf(stderr, "CFStreamCreatePairWithSocket() failed\n");
return;
}
CFReadStreamOpen(readStream);
CFWriteStreamOpen(writeStream);
/* Wait for the client to finish sending the joke; wait for newline */
// How to create a new IOS thread from here to read data from client.
}
我想创建NSThread来监听来自客户端的数据。因为这是一个C ++函数,所以我无法从Object C访问变量。 感谢。
答案 0 :(得分:0)
这里有几个选项。
您可以在新的.mm文件中编写一个目标C帮助函数,并从您的C ++代码中调用它
您可以将C ++文件更改为.mm扩展名。这样你就可以将Objective C代码与C ++混合使用。您可能需要在文件顶部添加一些包含魔法的魔法: -
#ifdef __OBJC__
// prevent C++ compiler errors
#import <Foundation/Foundation.h>
#endif
3.您还应该考虑使用GCD。它使用C接口,可以使用dispatch_async()
完成所需的一切。由于dispatch_async()
使用块,因此如果您仍在使用.cpp文件扩展名,则需要设置-fblocks
编译器标志。