iOS Socket编程-C语言版(UDP)

本文介绍了如何使用C语言在iOS平台上进行UDP Socket编程,包括客户端和服务器端的实现。客户端通过创建Socket、发送消息到服务器并接收响应,而服务器端负责接收客户端消息并回传。提供了详细步骤和代码实现。
摘要由CSDN通过智能技术生成

iOS Socket编程-C语言版(UDP)


本篇文章为总结使用C语言的api来完成UDP通信的基本功能,如果您对Socket不了解,请先阅读上一篇理论知识:

iOS Socket理论知识

如果文章中有任何您认为不正确的或者有疑问的,请联系笔者!

谢谢!

支持原创,请阅读原文

1. UDP Socket编程


先讲一讲UDP编程,因为比TCP要简单多了。首先,我们需要明白UDP是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的。

注意:Socket通信一定有要服务端和客户端。

1.1 UDP Socket客户端

客户端的工作流程:首先调用socket函数创建一个Socket,然后指定服务端的IP地址和端口号,就可以调用sendto将字符串传送给服务器端,并可以调用recvfrom接收服务器端返回的字符串,最后关闭该socket。

笔者这里分成了四步:

  1. 第一步:创建socket并配置socket,如服务端ip地址和端口号
  2. 第二步:调用sendto发送消息到服务器端
  3. 第三步:调用recvfrom接收来自服务器端的消息
  4. 第四步:调用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值