Tag: 套接字

iOS:将iOS应用程序屏幕转换为networking数据包

我正在开发一个iOS应用程序,我需要共享我的iOS应用程序屏幕转换为networking数据包到另一个服务器的目的地。 我可以使用套接字编程来发送和接收networking数据包。 但是,我想知道,如何才能将我的iOS应用程序本地屏幕(视图)转换为数据包? 例如:在Windows桌面,由RDP和video驱动程序实现的桌面屏幕转换为数据包。 请告知是否有人遇到这样的事情。 谢谢。 Getsy。

NSJSONSerialization无法parsing有效的JSON – “垃圾在尽头”

我的iOS程序正在接收JSON数据并试图parsing它,但由于某些原因,我无法确定。 multithreading几乎同时调用这个函数。 这一切都开始发生,一旦我切换到使用GCDAsyncSocket,奇怪。 以下是接收和parsing数据的相关代码: // Called whenever I want my program to receive null-terminated data from the server: [socket readDataToData:[NSData dataWithBytes:"\0" length:1] withTimeout:10 tag:0]; – (void)socket:(GCDAsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag{ // a GCDAsyncSocket delegate method [self didReceiveNetworkData:data]; } – (void)didReceiveNetworkData: (NSData*) data{ if (TESTING) NSLog(@"Received network data of length %lu===\n%@\n===", (unsigned long) data.length, [[NSString alloc] […]

从Socket连接在iOS上播放audio

希望你能帮助我解决这个问题,我看到很多与此有关的问题,但是没有一个真正帮助我弄清楚我在这里做错了什么。 所以在Android上,我有一个AudioRecord,它正在loggingaudio并通过套接字连接将audio作为字节数组发送到客户端。 这部分在Android上非常简单,并且工作得很好。 当我开始使用iOS时,发现没有简单的方法可以解决这个问题,所以在经过两天的研究和封堵之后,玩这个就是我所得到的。 哪个仍然不能播放任何audio。 它启动时会产生噪音,但没有任何audio通过插口传输。 我确认套接字通过logging缓冲区数组中的每个元素来接收数据。 这里是我使用的所有代码,很多是从一堆网站重用,不能记住所有的链接。 (BTW使用AudioUnits) 首先,audio处理器:播放回叫 static OSStatus playbackCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) { /** This is the reference to the object who owns the callback. */ AudioProcessor *audioProcessor = (__bridge AudioProcessor*) inRefCon; // iterate over incoming stream an copy to output stream […]

iOS上的VoIP套接字 – 未收到通知

我有一个VoIP应用程序,使用TCP服务在来电时唤醒它。 TCP套接字使用以下代码片段创build: CFReadStreamRef read = NULL; CFWriteStreamRef write = NULL; … CFStreamCreatePairWithSocketToHost(NULL,(__bridge CFStringRef)shost, port, &read, &write); self.read = (__bridge NSInputStream*)read; self.write = (__bridge NSOutputStream*)write; if (![self.read setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]){ [Log log:@"Could not set VoIP mode to read stream"]; } if (![self.write setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]){ [Log log:@"Could not set VoIP mode to write stream"]; } self.read.delegate = self; […]

iPhone UDP广播和响应

我需要从iPhone发送一个UDP广播,然后侦听超时时间的UDP响应。 我发现苹果的UDPEcho例子,但我不知道,如果这是我所需要的。 还发现这个例子发送,但没有收到。 基本上,我需要做这样简单的事情: //send the broadcast SendUDP("255.255.255.255", targetPort, myData); //A blocking call to get the data. Timeout value will be short, 2 seconds at most //An asynchronous option is ok, if it's necessary. Response = GetFirstUDPResponse(receptionPort, timeoutValue); //process the response if(Response == null) //we timed out else //process response 我希望有一个简单的解决scheme,我不必重新发明车轮。 我很欣赏任何关于实施这个最佳策略的build议!

SSL Socket连接iOS

我想build立一个安全的连接到一个Java运行SSLServerSocket。 我已经创build了自己的根CA,并签署了使用此证书的Java SSLServerSocket的证书。 我想将这个根证书添加到我的应用程序,以便由根证书签名的任何证书将工作。 到目前为止,我有安全的连接工作正常通过设置读取和写入stream属性为: NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys: (id)kCFStreamSocketSecurityLevelNegotiatedSSL, kCFStreamPropertySocketSecurityLevel, [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates, [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredRoots, [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,nil]; 我将证书添加到钥匙串中,如下所示: -(void)addRootCert{ NSString* rootCertPath = [[NSBundle mainBundle] pathForResource:@"rootCA" ofType:@"der"]; NSData* rootCertData = [NSData dataWithContentsOfFile:rootCertPath]; OSStatus err = noErr; SecCertificateRef rootCert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)rootCertData); NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:(__bridge_transfer id)kSecClassCertificate, kSecClass, rootCert, kSecValueRef, […]

使用NSOutputStream通过套接字发送数据的正确方法

我刚开始在iOS上的套接字编程,我正在努力确定使用NSStreamEventHasSpaceAvailable事件的NSOutputStreams 。 一方面, Apple的官方文档(清单2)显示在-stream:handleEvent: delegate方法中,应该使用-write:maxLength: message将数据写入输出缓冲区,每当NSStreamEventHasSpaceAvailable事件被收到。 另一方面, 来自Ray Wenderlich的这个教程和GitHub上的这个iOS TCP套接字例子完全忽略了NSStreamEventHasSpaceAvailable事件,并且只要他们需要(甚至忽略-hasSpaceAvailable ),继续-write:maxLength:到缓冲区。 第三,有这个例子代码似乎做两个 … 我的问题是,什么是正确的方式来处理写入数据到一个NSOutputStream连接到套接字? 如果NSStreamEventHasSpaceAvailable事件代码(显然)被忽略,那么它有什么用处? 在我看来,有非常幸运的UB发生(在例子2和3),或者有几种方式通过基于套接字的NSOutputStream发送数据…

Swift iOS和Java套接字之间的TCP通信

我试图build立我的Java应用程序和相关(正在进行中的)iOS应用程序之间的通信。 打开套接字后,iOS应用程序(客户端)将“握手”string写入stream,然后等待读取stream(我认为)。 当代Java应用程序(服务器,在iOS应用程序之前启动)以成功的套接字打开并等待BufferedReader读取“握手”,此时这两个应用程序都被阻塞。 我不明白怎么可能? 按照iOS代码的一部分: public class Client: NSObject, NSStreamDelegate { var serverAddress: CFString let serverPort: UInt32 = 50000 private var inputStream: NSInputStream! private var outputStream: NSOutputStream! private var connecting:Bool init(ip:String) { serverAddress = ip connecting = false super.init() connect() } func connect() { connecting = true while connecting { print("connecting…") var readStream: Unmanaged<CFReadStream>? var […]

iOS上通过蓝牙进行类似TLS的encryption?

所以,这可能是一个非常特殊的情况,但是我希望有人能帮助我。 我需要通过蓝牙与外设通话。 我们也控制固件的设备。 现在的问题是:我们需要确保没有人可以窃听,因为要发送的信息将是保密的。 这意味着我们需要encryption通信。 从我看到的是蓝牙LE 4.2支持encryption,但我们必须能够支持比6s更旧的iPhone。 这意味着:没有BLE 4.2并且没有内置的encryption。 换句话说,我们需要自己构buildencryption。 外围的开发者和我同意使用TLS握手来交stream密钥交换,以减less我们可能破坏的事情的数量。 我花了最近几天寻找解决scheme,以及如何解决这个问题。 但是,这似乎是一个非常具体的案例,并不是很多人已经解决了。 我能find的所有图书馆都依赖于套接字。 而我所能find的有关iOS的套接字是IPnetworking,而不是蓝牙。 有没有人有这种蓝牙通信的经验? 或者其他一些build议? 也许我忽略了一些明显的解决scheme? 谢谢 :)

我如何使用CocoaAsyncSocket读取数据?

我在我的appDelegate didFinishLaunchingWithOptions方法中创build了一个TCP套接字连接 。 这是很容易的一部分,我已经成功连接到我的服务器。 我很难从我的视图中读取服务器的数据。 我一直在浏览如何适当(一步一步)使用CocoaAsyncSocket读取数据的教程 ,但我没有遇到任何有用的东西。 这是我的代码从我的appDelegate: -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { socket = [[AsyncSocket alloc] initWithDelegate:self]; [self connect]; self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.viewController = [[[tekMatrixViewController alloc] initWithNibName:@"tekMatrixViewController" bundle:nil] autorelease]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; } 这里是我的连接方法,在appDelegate文件的底部: – (void)connect { […]