Socket 聊天
@property (weak, nonatomic) IBOutlet UITextField *hostName;
@property (weak, nonatomic) IBOutlet UITextField *portNumber;
@property (weak, nonatomic) IBOutlet UITextField *messageText;
@property (weak, nonatomic) IBOutlet UILabel *recvLabel;
@property (weak, nonatomic) IBOutlet UIButton *sendButton;
- (BOOL)connectToHost:(NSString *)hostName port:(int)port {
self.clientSocket = socket(AF_INET, SOCK_STREAM, 0);
NSLog(@"%d", self.clientSocket);
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr(hostName.UTF8String);
serverAddr.sin_port = htons(port);
return connect(self.clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr)) == 0;
}
- (IBAction)connect {
BOOL result = [self connectToHost:self.hostName.text port:self.portNumber.text.intValue];
self.sendButton.enabled = result;
self.recvLabel.text = result ? @"成功" : @"失败";
}
- (NSString *)sendAndRecv:(NSString *)msg {
ssize_t sendLen = send(self.clientSocket, msg.UTF8String, strlen(msg.UTF8String), 0);
NSLog(@"发送 %ld %tu %ld", sendLen, msg.length, strlen(msg.UTF8String));
uint8_t buffer[1024];
ssize_t recvLen = recv(self.clientSocket, buffer, sizeof(buffer), 0);
NSLog(@"接收了 %ld %ld", recvLen, sizeof(buffer));
NSString *result = [[NSString alloc] initWithBytes:buffer length:recvLen encoding:NSUTF8StringEncoding];
return result;
}
- (IBAction)send {
self.recvLabel.text = [self sendAndRecv:self.messageText.text];
}