基本上我写了一个 NSData 对象:
[asyncSocket writeData:JSONRequestData withTimeout:-1 tag:1];
Run Code Online (Sandbox Code Playgroud)
当运行时,调用委托
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,当写入到缓冲区时......它没有写出到服务器。
当我停止构建时,我猜套接字决定写入所有内容,并且服务器最终会看到它。
我该如何解决这个问题?没有办法刷新 CocoaAsyncSocket,因为它没有必要...我尝试添加行结尾,例如“/n”等,但这也没有任何作用。
我一直在寻找通过TCP将文件(在iphone上录制的小声音)发送到服务器以及从服务器发送到其他设备的方法.似乎最简单的方法是使用CocoaAsyncSocket项目.(这是真的吗?)
然而,虽然我可以找到很多关于如何使用它的例子,但我找不到关于如何安装它的单一解释.
我对iOS和Xcode比较陌生,而且相当丢失.有人可以向我解释如何获得图书馆吗?(我知道如何在我的项目中添加库,但是我只通过gitHub找到了.m文件的下载)
谢谢
我已经坚持这个问题几天了,似乎越来越接近一个决议(在伟大的用户@ SO的帮助下).我正在使用CocoaAsyncSocket库来创建到Windows服务器的TCP套接字连接.
我的appDelegate正在建立连接:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
socket = [[AsyncSocket alloc] initWithDelegate:self];
NSError *error = nil;
if (![socket connectToHost:@"199.5.83.63" onPort:11005 error:&error])
{
NSLog(@"Error connecting: %@", error);
}
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;
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为onSocket的连接方法(库的一部分):( AsyncSocket*)sock didConnectToHost:(NSString*)主机端口:(UInt16)端口:
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"connected :D");
}
Run Code Online (Sandbox Code Playgroud)
正在调用此方法,因为我可以看到NSLOG的输出并且我已成功连接.我还可以从Windows机器上看到连接成功(使用日志文件).
我还测试了另一个委托方法也被调用:
- (void)onSocket:(AsyncSocket *)sock …Run Code Online (Sandbox Code Playgroud) 所以这就是问题:流不是在正确的时间写入,而是无法从我的服务器获得响应.我知道我正在编写正确的数据,因为当我停止构建时,它会写入服务器并且服务器很高兴.我很困惑为什么这不是在正确的时间发生的.
我正在使用GCDAsyncSocket来读/写套接字
我已经创建了一个单独的类来处理所有网络,这是我的代码:
-(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;
}
//GCD Async Delegate Methods
- (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"socket:%p didConnectToHost:%@ port:%hu", sender, host, port);
NSLog(@"Cool, I'm connected! That was easy.");
}
- (void)socket:(GCDAsyncSocket …Run Code Online (Sandbox Code Playgroud)