Objective-c 服务端
2015-12-11 00:00
507 查看
// // main.m // 服务端12-11 // // Created by dc004 on 15/12/11. // Copyright © 2015年 gang. All rights reserved. // #import <Foundation/Foundation.h> //提供socket函数以及数据结构 #include <sys/socket.h> //定义数据结构 #include <netinet/in.h> //提供IP地址转换函数 #include <arpa/inet.h> int main() { //服务端顺序:socket->bind->listen->while(true) accept->do while recv ->close int fd = socket(AF_INET, SOCK_STREAM, 0); BOOL success = (fd != -1); struct sockaddr_in addr; int err; //服务端地址设置 if (success) { NSLog(@"socket success"); memset(&addr, 0, sizeof(addr)); addr.sin_len = sizeof(addr); addr.sin_family = AF_INET;//IPv4 addr.sin_port = htons(1024); addr.sin_addr.s_addr = INADDR_ANY; //进行绑定 err = bind(fd, (const struct sockaddr*)&addr, sizeof(addr)); success = (err == 0); }if (success) { NSLog(@"bind成功"); //listen监听 //第二个参数为等待接收的连接的队列的大小。比如在connect请求过来的时候,完成三次握手后先将连接放到队列中,直到被accept处理。如果这个队列满了,并且又有新的连接的时候,对方可能会收到错误信息。 err = listen(fd, 5); success = (err == 0); }if (success) { NSLog(@"listen success"); while (true) { struct sockaddr_in clientaddr; //定义客户端的套接字,用于获取接收到的客户端套接字。 int clientfd; //定义一个地址长度变量,接收客户端的长度 socklen_t addrLen; addrLen = sizeof(clientaddr); NSLog(@"准备接收"); //accept函数 //第二个参数用于返回客户端的协议地址 //第三个参数为协议地址的长度 clientfd = accept(fd, (struct sockaddr*)&clientaddr, &addrLen); success = (clientfd != -1); if (success) { char buf[1024]; ssize_t count;//用于接收函数的返回值 size_t len = sizeof(buf); do{ //recv()成功返回实际读入缓冲的数据字节数。 count = recv(clientfd, buf, len, 0); if (count < 0) { NSLog(@"再见"); break; } //输出(将c语言字符串转换成oc字符串输出) NSString *str = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); }while (strcmp(buf, "exit") != 0); } //关闭客户端:只是关闭这个套接字特定的TCP连接 close(clientfd); } } return 0; }
相关文章推荐
- NSObject
- 关于 Object.prototype.toString.call() 方法
- Objective-C 歌词解析
- Objective-C歌词解析
- OC lrc歌词解析
- ognl.MethodFailedException: Method "setEndtime" failed for object com.piptrade.action.tradetools.eCa
- ObjectAnimator 安卓属性动画简单入门
- Swift中的AnyObject和as
- Objective-C 引用计数
- 使用JSONObject.fromObject出现的问题
- Objective-c语言_点语法和@property
- Objective-c语言_便利初始化函数和便利构造器
- object-c和Java的简单比较
- Objective-c语言_设置器和访问器
- Objective-C中.h、.m、.mm的区别
- OC内存管理
- Objective-C 之KVC详解
- Xcode 导入头文件自动补齐
- Objective-C关键字__Nullable和__Nonnull
- IOS开发之NSObject协议类方法说明