iOS Socket编程-C语言版(UDP)
本篇文章为总结使用C
语言的api
来完成UDP
通信的基本功能,如果您对Socket
不了解,请先阅读上一篇理论知识:
如果文章中有任何您认为不正确的或者有疑问的,请联系笔者!
谢谢!
支持原创,请阅读原文
1. UDP Socket编程
先讲一讲UDP
编程,因为比TCP
要简单多了。首先,我们需要明白UDP
是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的。
注意:
Socket
通信一定有要服务端和客户端。
1.1 UDP Socket客户端
客户端的工作流程:首先调用socket
函数创建一个Socket
,然后指定服务端的IP
地址和端口号,就可以调用sendto
将字符串传送给服务器端,并可以调用recvfrom
接收服务器端返回的字符串,最后关闭该socket。
笔者这里分成了四步:
- 第一步:创建
socket
并配置socket
,如服务端ip
地址和端口号 - 第二步:调用
sendto
发送消息到服务器端 - 第三步:调用
recvfrom
接收来自服务器端的消息 - 第四步:调用
close
关闭socket
1.1.1 客户端的代码实现:
- (void)udpClient {
int clientSocketId;
ssize_t len;
socklen_t addrlen;
struct sockaddr_in client_sockaddr;
char buffer[256] = "Hello, server, how are you?";
// 第一步:创建Socket
clientSocketId = socket(AF_INET, SOCK_DGRAM, 0);
if(clientSocketId < 0) {
NSLog(@"creat client socket fail\n");
return;
}
addrlen = sizeof(struct sockaddr_in);
bzero(&client_sockaddr, addrlen);
client_sockaddr.sin_family = AF_INET;
client_sockaddr.sin_addr.s_addr = inet_addr("192.168.1.107");
client_sockaddr.sin_port = htons(1024);
int count = 10;
do {
bzero(buffer, sizeof(buffer));
sprintf(buffer, "%s", "Hello, server, how are you?");
// 第二步:发送消息到服务端
// 注意:UDP是面向无连接的,因此不用调用connect()
// 将字符串传送给server端
len = sendto(clientSocketId, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_sockaddr, addrlen);
if (len > 0) {
NSLog(@"发送成功");
} else {
NSLog(@"发送失败");
}
// 第三步:接收来自服务端返回的消息
// 接收server端返回的字符串
bzero(buffer, sizeof(buffer));
len = recvfrom(clientSocketId, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_sockaddr, &addrlen);
NSLog(@"receive message from server: %s", buffer);
count--;
} while (count >= 0);
// 第四步:关闭socket
// 由于是面向无连接的,消息发出处就可以了,不用管它收不收得到,发完就可以关闭了
close(clientSocketId);
}
1.1.2 客户端的打印日志
2015-12-06 15:38:36.095 iOS-Socket-C-Version-Client[9709:4234848] 发送成功
2015-12-06 15:38:36.286 iOS-Socket-C-Version-Client[9709:4234848] receive message from server: Hello, server, how are you?
2015