socket
2016-07-15 15:50
330 查看
dispatch_async(dispatch_get_global_queue(0,
0), ^{
sendMsgSocketfd
=
socket(AF_INET,
SOCK_STREAM,
0);
struct
sockaddr_in addr;
const
char *ipadd = [IPAddr
cStringUsingEncoding:NSUTF8StringEncoding];
memset(&addr,
0,
sizeof(addr));
addr.sin_family
=
AF_INET;
addr.sin_port
=
htons(port);
//这个函数转换字符串到网络地址,第一个参数af是地址簇,第二个参数*src是来源地址,第三个参数*
dst接收转换后的数据。
inet_pton(AF_INET,
ipadd, &addr.sin_addr);
int connect_fd =
connect(sendMsgSocketfd,
(struct
sockaddr*)&addr,
sizeof(addr));
if (connect_fd == -1)
{
NSLog(@"connect error :%s",strerror(errno));
}
NSLog(@" >> Successfully connected to");
const
char *cMsg = [msg
cStringUsingEncoding:NSUTF8StringEncoding];
send(sendMsgSocketfd,cMsg
,
strlen(cMsg),
0);
//buffer malloc
开辟一块这么大的内存空间
char *buffer =
malloc(MAX_Buffer);
//接收
recv(sendMsgSocketfd,
buffer,
MAX_Buffer,
0);
NSString
*str = [NSString
stringWithCString:buffer
encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(),
^{
NSLog(@"client receive msg %@",str);
});
close(sendMsgSocketfd);
});
}
/*
1.打开socket,获得描述字
socket()
2.绑定IP地址
bind()
3.开始收听连接 listen()
4.同意连接 accept()
同步函数,会卡死当前线程,直到有客户端连接时
5.接收数据
rev()
6.close
*/
+(void)buildServer:(int
)port withMsgBlock:(MsgBlock)block{
dispatch_async(dispatch_get_global_queue(0,
0), ^{
serverSocketfd
=
socket(AF_INET,
SOCK_STREAM,
0);
struct
sockaddr_in addr;
memset(&addr,
0,
sizeof(addr));
addr.sin_family
=
AF_INET;
addr.sin_port
=
htons(port);
addr.sin_addr.s_addr
=
htonl(INADDR_ANY);
int bindSuccess =
bind(serverSocketfd,(struct
sockaddr*) &addr,
sizeof(addr));
if (bindSuccess == -1)
{
NSLog(@"bind error : %s",strerror(errno));
}
listen(serverSocketfd,
10);
NSLog(@"-------waiting for client`s request--------");
while
(1) {
int connectfd =
accept(serverSocketfd,
NULL,
NULL);
if (connectfd == -1)
{
continue;
}
char *buffer =
malloc(MAX_Buffer);
//char buffer[MAX_Buffer];
//接收
recv(connectfd, buffer,
MAX_Buffer,
0);
NSString
*str = [NSString
stringWithCString:buffer
encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(),
^{
block(str);
});
const
char *sendmm =
"hello world";
send(connectfd,sendmm ,
strlen(sendmm),
0);
NSLog(@"send success");
close(connectfd);
}
});
}
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- 【CF 应用开发大赛】IT Share(IT分享网)
- IT职场英语,必须学会
- java socket 注意的地方
- java socket 注意的地方
- it人员要看饮食保健养生谚语
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- websocket++简单使用及实例分析
- Android聊天工具基于socket实现
- php与flash as3 socket通信传送文件实现代码
- 解决time_wait强制关闭socket
- asp.net使用Socket.Send发送信息及Socket.SendFile传输文件的方法
- C#使用Socket上传并保存图片的方法