struct sockaddr_in server_addr;
server_addr.sin_len = sizeof(struct sockaddr_in);
server_addr.sin_family = AF_INET;//AF_INET互联网地址簇
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = inet_addr(address);
bzero(&server_addr.sin_zero, 8);
//创建socket
int server_socket = socket(AF_INET, SOCK_STREAM, 0);//SOCK_STREAM 有链接
if (server_socket == -1) {
perror("socket error!");
return 1;
}
int bind_result = bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr));
if (bind_result == -1) {
perror("bind error!");
return 1;
}
if (listen(server_socket, 5)) {
perror("listen error!");
return 1;
}
int client_socket;
socklen_t address_len;
struct sockaddr_in client_address;
for (; ; ) {
address_len = sizeof(client_address);
client_socket = accept(server_socket, (struct sockaddr*)&client_address, &address_len);
//1.使用多线程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//这个函数进行数据操作
str_echo(client_socket);
});
}
char buf[1024];
while (1) {
bzero(buf, 1024);
long byte_num = recv(socket, buf, 1024, 0);
if (byte_num < 0) {
return;
}
buf[byte_num] = '\0';
printf("client said:%s\n", buf);
char *result;
NSString *str = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding];
if ([str isEqualToString:@"1"]) {
result = "你猜!";
}
else if ([str isEqualToString:@"2"])
{
result = "谢谢!";
}
else if ([str isEqualToString:@"3"])
{
result = "对不起!";
}
else if ([str isEqualToString:@"4"])
{
result = "好的!";
}
else
{
if (arc4random()%2 == 0) {
result = "不知道你在说什么!";
}
else
{
result = buf;
}
}
send(socket, result, 1024, 0);
}
struct sockaddr_in server_addr;
server_addr.sin_len = sizeof(struct sockaddr_in);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(11332);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&(server_addr.sin_zero), 8);
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1) {
perror("socket error");
return 1;
}
char receive_msg[1024];
char reply_msg[1024];
if (connect(server_socket, (struct sockaddr*)&server_addr, sizeof(struct sockaddr_in)) == 0) {
//connect 成功之后,其实系统将你创建的socket绑定到一个系统分配的端口上,且其为全相关,包含服务器端的信息,可以用来和服务器端进行通信。
while (1) {
bzero(reply_msg, 1024);
printf("replay:");
scanf("%s", reply_msg);
if (send(server_socket, reply_msg, 1024, 0) == -1) {
perror("send error!");
return 1;
}
bzero(receive_msg, 1024);
long byte_num = recv(server_socket, receive_msg, 1024, 0);
receive_msg[byte_num] = '\0';
printf("server said:%s\n", receive_msg);
}
}
return 0;
- (void)viewDidLoad {
[super viewDidLoad];
NSString *documentStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *dataPath = [documentStr stringByAppendingPathComponent:@"data.txt"];
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:dataPath]) {
self.read = YES;
NSLog(@"string:%@", [NSString stringWithContentsOfFile:dataPath encoding:NSUTF8StringEncoding error:nil]);
NSInputStream *inStream = [[NSInputStream alloc] initWithFileAtPath:dataPath];
[inStream setDelegate:self];
[inStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inStream open];
}
else
{
if ([manager createFileAtPath:dataPath contents:nil attributes:nil]) {
self.read = NO;
NSOutputStream *outStream = [[NSOutputStream alloc] initToFileAtPath:dataPath append:YES];
[outStream setDelegate:self];
[outStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outStream open];
}
else
{
NSLog(@"文件创建失败!");
}
}
}
#pragma mark - <NSStreamDelegate>代理方法
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
if (self.read) {
NSInputStream *inStream = (NSInputStream *)aStream;
switch (eventCode) {
case NSStreamEventHasBytesAvailable:
{
uint8_t data[1024];
[inStream read:data maxLength:1024];
printf("%s", data);
[inStream close];
[inStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
inStream = nil;
}
break;
case NSStreamEventEndEncountered:
{
[inStream close];
[inStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
inStream = nil;
}
break;
default:
break;
}
}
else{
NSOutputStream *outStream = (NSOutputStream *)aStream;
switch (eventCode) {
case NSStreamEventHasSpaceAvailable:
{
uint8_t data[] = "{name:'张三', age:10}";
[outStream write:data maxLength:strlen((char *)data)];
[outStream close];
[outStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
outStream = nil;
}
break;
case NSStreamEventEndEncountered:
{
[outStream close];
[outStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
outStream = nil;
}
break;
default:
break;
}
}
}
- (void)viewDidLoad {
[super viewDidLoad];
[self startSocket:@"127.0.0.1" andPort:11332];
}
- (void)startSocket:(NSString *)address andPort:(int)port
{
CFReadStreamRef readRef;
CFWriteStreamRef writeRef;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)address, port, &readRef, &writeRef);
NSInputStream *inputStream = (__bridge NSInputStream *)readRef;
NSOutputStream *outputStream = (__bridge NSOutputStream *)writeRef;
inputStream.delegate = self;
outputStream.delegate = self;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
self.outputStream = outputStream;
}
- (IBAction)sendMsg:(UIButton *)sender {
if (sender.currentTitle > 0) {
const char *output = sender.currentTitle.UTF8String;
[self.outputStream write:(const uint8_t *)output maxLength:strlen(output)];
}
}
- (void)showMessage:(NSString *)msg
{
if (!self.msgLabel) {
UIFont *font = [UIFont systemFontOfSize:14];
UIColor *color = [UIColor blackColor];
UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];
UILabel *label = [[UILabel alloc] init];
label.textColor = color;
label.font = font;
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = backColor;
self.msgLabel = label;
}
CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
CGFloat W = screenW - 16;
CGSize size = [msg boundingRectWithSize:CGSizeMake(W, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.msgLabel.font} context:nil].size;
W = size.width;
CGFloat H = size.height;
CGFloat X = (screenW - W)/2;
CGFloat Y = (screenH - H)/2;
self.msgLabel.frame = CGRectMake(X, Y, W, H);
self.msgLabel.text = msg;
[self.view addSubview:self.msgLabel];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.msgLabel removeFromSuperview];
});
}
#pragma mark - <NSStreamDelegate>代理方法
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventNone:
break;
case NSStreamEventOpenCompleted:
break;
case NSStreamEventHasBytesAvailable:
{
uint8_t buf[1024];
NSInteger len = 0;
NSInputStream *inputStream = (NSInputStream *)aStream;
len = [inputStream read:buf maxLength:1024];
if (len) {
[self showMessage:[NSString stringWithCString:(const char *)buf encoding:NSUTF8StringEncoding]];
}
break;
}
case NSStreamEventHasSpaceAvailable:
break;
case NSStreamEventErrorOccurred:
{
[aStream close];
break;
}
case NSStreamEventEndEncountered:
{
[aStream close];
[aStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
aStream = nil;
break;
}
default:
break;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有