- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我按下发送按钮时,客户端每次都发送消息,但服务器只在第一次接收消息。服务器有什么问题
服务器:
- (void)viewDidLoad
{
[super viewDidLoad];
asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if (![asyncSocket acceptOnPort:10000 error:&err]){
NSLog(@"Error in acceptOnPort:error: -> %@", err);
}
}
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
NSLog(@"Accepted new socket from %@:%hu", [newSocket connectedHost], [newSocket connectedPort]);
self.asyncSocket = newSocket;
NSString *welcomMessage = @"Hello from the server\r\n";
[self.asyncSocket writeData:[welcomMessage dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:1];
[self.asyncSocket readDataWithTimeout:-1 tag:0];
}
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"MSG: %@",msg);
}
客户:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[socket setDelegate:self];
}
-(IBAction)connectToServer {
NSError *err = nil;
if (![socket connectToHost:self.txtIp.text onPort:10000 error:&err]) // Asynchronous!
{
// If there was an error, it's likely something like "already connected" or "no delegate set"
NSLog(@"I goofed: %@", err);
return;
}
}
- (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"Cool, I'm connected! That was easy.");
[socket readDataWithTimeout:-1 tag:0];
}
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
{
if (tag == 1)
NSLog(@"First request sent");
else if (tag == 2)
NSLog(@"Second request sent");
}
- (void)socket:(GCDAsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag
{
NSLog(@"Received Data: %@",data);
}
-(void)sendMessage {
NSData *msg = [self.txtMsg.text dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Data Send: %@",msg);
[socket writeData:msg withTimeout:-1 tag:1];
}
最佳答案
您必须在 didReadData: 委托(delegate)中从您的服务器类进行读取调用。休息很好。使用以下代码。
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
[sock readDataWithTimeout:-1 tag:0];
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"MSG: %@",msg);
}
关于ios - GCDAsyncSocket 服务器仅在第一次接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25786005/
这是我的Objective-C代码...我也尝试过注释掉的代码,但是没有运气。我只是想让它连接。 @implementation ViewController - (void)viewDidLoad
我正在 Mac OS 上的 Swift 上编写简单的 Telnet 客户端。我正在连接到 localhost 上的端口 9052 并发送三个简单的命令。这是我的代码: import Cocoa imp
要包含的代码不多,但为什么 GCDAsyncSocket 客户端可能会在写入数据排队之前停止读取?症状: 虽然服务器调用“didAcceptNewSocket”,但“didConnectToHost”
在我的应用程序中,我使用 GCDAsyncSocket,并以这种方式写入和读取: NSData *bufferWriteData = [NSData dataWithBytesNoCopy:buffe
很容易理解,我们可以使用以下方式来识别传入消息的结束,例如:1. 将消息的长度放在数据本身之前2.使用分隔符 然而,GCDAsyncSocket提供了更全面/更智能/通用的解决方案。而且它似乎使用低级
GCDAsyncSocket 的文档说,在将可能更改的可变数据传递给写入函数之前,应该复制它。 在下面的代码中: func send(buffer: NSMutableData) { let
各位程序员大家好, 我正在尝试允许用户向其他用户发送推送通知(例如发送好友请求等)。 这里的最终目标是让我的 iOS 应用程序在用户登录到他们的帐户(也就是加载了特定 View )后持续监听特定的主机
我正在使用 GCD AsyncSocket 创建客户端应用程序以连接到由 SSLServer Socket 使用自签名证书创建的服务器 java。通过一种方式的身份验证,我可以很好地初始化 SSL 套
当我使用 GCDasyncsocket 从服务器(java)获取套接字消息时,它在 ios 模拟器(xcode 6,iphone6+)中工作;但是当我用我的iphone6+连接测试的时候,接收到大数据
我正在使用 GCDAsyncSocket (MRC/iOS5.1) 一段时间,尤其是“大”文件 (5 - 10 mb)。不幸的是,有时读取流永远不会完成(例如,它被卡住)只是在流末尾的几个字节; di
当我按下发送按钮时,客户端每次都发送消息,但服务器只在第一次接收消息。服务器有什么问题 服务器: - (void)viewDidLoad { [super viewDidLoad];
我一直在使用CocoaAsyncSocket在没有 SSL 的情况下将数据发送到我们的服务器。现在服务器端已经实现了带有客户端身份验证的 SSL/TLS。为了在我们的应用程序中实现这一点,我获得了以下
我正在制作一款多人 iOS 游戏,遇到了以下问题:我发送了一个字典,其中包含一组自定义对象。这些自定义对象符合 NSCoding。我将字典转换为 NSData,如下所示: NSData *data
我已经在使用 GCDAsyncSocket 连接 2 个设备。一个广播自身并接受连接,另一个监听并请求连接。如果我尝试将另一台设备连接到仍在广播的主机,它会连接然后在第一台设备仍处于连接状态时获得连接
我尝试连接到服务器并向服务器发送一些信息(例如用户名、密码..),然后服务器向我发送回 ID(字符串类型)。问题是我拿不到身份证。有人可以帮助我吗?我是 IOS 编码的初学者。谢谢。 代码如下: 点击
我正在为我的 iOS 项目使用 XMPP 和 OpenFire。互联网连接稳定。第一次登录时一切都很好。但是从第二次开始(注销然后再次登录),它很少起作用。我经常在 10-15 秒后收到 readTi
我正在为我的 iOS 消息应用程序使用 GCDAsyncSocket 库,并在后端使用 Twisted Server。一切都设置得很好并且工作正常,但是当它不能正常工作时,我发现了一个特殊的情况。因此
我能够通过 IP 和端口连接到所需的套接字。 - (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host por
我是 GCD 原理和 GCDAsyncSocket 的新手,但我正在我的项目中使用它。我在 AppDelegate 中初始化 GCD 套接字: self.socket = [[GCDAsyncSock
我在 iOS 应用程序中使用 GCDasyncsocket 通过套接字连接发送字符串,然后通过同一套接字连接每秒读取一个字符串。我还在不同端口上的同一服务器上创建了第二个套接字,并且每秒读取一次。 我
我是一名优秀的程序员,十分优秀!