Tag: cocoaasyncsocket

从CocoaAsyncSocket开始

我一直在寻找方法来发送文件(iphone上logging的小型声音)通过TCP到服务器和从服务器到其他设备。 看来最简单的方法是使用CocoaAsyncSocket项目。 (这是真的吗?) 然而,虽然我可以find很多关于如何使用它的例子,但我找不到一个关于如何安装的例子。 我对iOS和Xcode相对来说比较陌生,在这方面也相当迷茫。 有人可以向我解释如何获得图书馆? (我知道如何添加一个库到我的项目,但是我只能通过gitHubfind.m文件的下载) 谢谢

从UDP服务器消息中检索string

我在我的基于Swift的iOS应用程序中使用CocoaAsyncSocket库。 我已经创build了一个asynchronousUDP套接字到我的networking上的UDP服务器,并发送回答。 我正在阅读这样的答复: func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) { println("didReceiveData") let data = address var host: NSString? var port1: UInt16 = 0 GCDAsyncUdpSocket.getHost(&host, port: &port1, fromAddress: address) println("From \(host!)") let gotdata = NSString(data: data, encoding: NSASCIIStringEncoding) //let gotdata: NSString = NSString(data: data, encoding: NSUTF8StringEncoding) println(gotdata) } 这是结果: didReceiveData […]

CocoaAsyncSocket和从套接字读取数据

在我基于TCP套接字的服务器上,我发送了一个数据包,数据包由一个指定数据包中的字节数的头部组成,然后是这个字节数。 对于那些熟悉Erlang的人,我只是设置{packet,4}选项。 在iOS端,我看起来像这样的代码,假设我想知道这个消息的stream的大小: [asyncSocket readDataToLength:4 withTimeout:-1 tag:HEADER_TAG]; 这工作正常,并调用下面的委托方法callback: onSocket:didReadData:withTag: 我想下一个合乎逻辑的步骤是计算出stream的大小,我这样做: UInt32 readLength; [data getBytes:&readLength length:4]; readLength = ntohl(readLength); 在服务器端对12个字节的string进行硬编码之后,readLength确实也在客户端读取了12个字节,所以目前为止都是很好的。 我继续以下内容: [sock readDataToLength:readLength withTimeout:1 tag:MESSAGE_TAG]; 此时尽pipeonSocket:didReadData:withTag:的callback不再被调用。 读取时发生超时,可能是因为我没有正确处理读取操作,这个委托方法被调用: – (NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length 所以服务器总共发送了16个字节,一个4字节的标题和一个12字节的二进制stream。 我相信,错误是我如何使用CocoaAsyncSocket。 在了解其尺寸之后,阅读其余部分stream程的正确方法是什么? **更新** 我改变了我的客户,似乎现在正在工作。 问题是,我不明白新解决scheme的readDataToLength点。 这是我改变我的初步阅读: [socket readDataWithTimeout:-1 tag:HEADER_TAG]; 现在在我的callback中,我只是做了以下几点: – (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { if (tag == HEADER_TAG) { […]

显示等待警报视图在加载

我想当我的应用程序启动它显示一个警报视图约5秒,然后根据后台进程的结果,它会显示另一个警报视图。 我遇到的问题是,当我尝试使用睡眠等待后台进程发生。 第一个警报不显示,并等待5秒钟。 该应用程序显示该应用程序的第一个视图,然后5秒钟后第一个警报显示简要。 我需要做什么来执行我所希望的。 这是我的代码。 – (void)viewDidAppear:(BOOL)animated { SSGlobalSettings *connSettings = [SSGlobalSettings sharedManager]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Connecting" message:@"Please wait, while your device connects" delegate:Nil cancelButtonTitle:nil otherButtonTitles: nil]; [alertView show]; [NSThread sleepForTimeInterval:5.0f]; [alertView dismissWithClickedButtonIndex: alertView.cancelButtonIndex animated: YES]; if ([connSettings.connectionStatus isEqual: @"Not Found"]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Connection Failed" message:@"Cannot find your […]

我如何使用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 { […]

GCDAsyncUdpSocket和多播发送和接收

在第一种方法中,我创build了基于sampleProject的客户端 – 服务器应用程序,它将一些数据发送到服务器。 Legend: sender address = reciver ip port = reciver port reciver address = null since he is listening port = in my case 55555 工作代码 跳过错误检查只是为了公共的原因 寄件人 -(id*)initForSender:(NSString*)address port:(int)port { self = [super init]; if (self) { _port = port; _address = address; tag = 0; _udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; […]

Swift:用GCDAsyncUdpSocket接收UDP

背景: 我想能够发送和接收我的iOS应用程序和服务器之间的UDP数据包。 服务器将每个传入的消息回显给客户端应用程序。 服务器经过testing并确认工作 。 我有一个StartViewController,它启动两个实现GCDAsyncUdpSocketDelegate的类,一个用于发送,另一个用于接收。 “发送套接字”正在工作,服务器收到消息。 问题: 该应用程序发送后永远不会收到传入的消息。 与侦听套接字设置的东西可能是错误的,因为didReceiveData永远不会被调用。 我完全做错了吗? 开始: class StartViewController: UIViewController { var inSocket : InSocket! var outSocket : OutSocket! override func viewDidLoad() { super.viewDidLoad() inSocket = InSocket() outSocket = OutSocket() } @IBAction func goButton(sender: UIButton) { outSocket.send("This is a message!") } } 接收: class InSocket: NSObject, GCDAsyncUdpSocketDelegate { let IP […]

无法编程stream

所以这里的问题是:stream没有在正确的时间写入,无法从我的服务器得到响应。 我知道我正在写正确的数据,因为当我停止构build时,它写入到服务器,服务器很高兴。 我很困惑,为什么这不是在正确的时间发生。 我正在使用GCDAsyncSocket读取/写入套接字 我做了一个单独的类来处理所有的networking,这里是我的代码: -(id)init{ self = [super init]; if (self) { asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *error = nil; if (![asyncSocket connectToHost:@"localhost" onPort:8888 error:&error]) // Asynchronous! { // If there was an error, it's likely something like "already connected" or "no delegate set" NSLog(@"I goofed: %@", error); } } return self; […]