博客
关于我
Objective-C实现tcp网络通讯服务器+客户端(附完整源码)
阅读量:795 次
发布时间:2023-02-20

本文共 3337 字,大约阅读时间需要 11 分钟。

在 Objective-C 中实现一个简单的 TCP 网络通信服务器和客户端,通常会选择使用底层的 BSD 套接字(sockets) API。这种方法在 macOS 平台上实现起来相对直接,特别适用于创建命令行工具。以下将详细介绍服务器端和客户端的实现步骤。

准备工作

在开始编写代码之前,需要先完成一些前置工作:

  • 安装 Xcode:确保你的 macOS 系统上已经安装了最新版本的 Xcode。如果尚未安装,可以通过苹果的开发者门户网站下载并安装。

  • 创建项目:为服务器和客户端各创建一个独立的 “macOS Command Line Tool” 项目。在 Xcode 中,选择 File > New > Project…,然后选择 macOS 的 Command Line Tool 项目类型。

  • Objective-C TCP 服务器端实现

    以下是服务器端的详细实现步骤:

  • 创建服务器项目

    • 打开 Xcode,选择 File > New > Project…。
    • 选择 macOS 下的 Command Line Tool 项目,点击 Next。
    • 输入项目名称,例如 TCPServer,选择 Objective-C 作为语言。
    • 点击 Next 并选择保存位置。
  • 实现服务器逻辑

    • 打开项目文件中的 main.m 文件,在其中添加以下代码:
      #import 
      #import
      #import
      #import
      int main(int argc, char **argv) { // 1. 创建 socket 描述符 int s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket failed"); return 1; } // 2. 绑定 socket 到本地 IP 和端口 struct sockaddr_in addr = {0}; addr.sin_family = AF_INET; addr.sin_port = htons(8080); addr.sin_addr = INADDR_ANY; if (bind(s, (socklen_t *)&addr, sizeof(addr)) == -1) { perror("bind failed"); return 1; } // 3. listen 客户端连接 int listen = 1; if (listen(s, listen) == -1) { perror("listen"); return 1; } // 4. 接受客户端连接 int new_socket; struct sockaddr_in from; socklen_t from_len = sizeof(from); if (accept(s, (socklen_t *)&from, &from_len) == -1) { perror("accept"); return 1; } new_socket = accept(s, (socklen_t *)&from, &from_len); // 5. 处理通信 while (true) { char buffer[1024]; int read_size = recv(new_socket, buffer, sizeof(buffer), 0); if (read_size == -1) { break; } printf("Server received: %s\n", buffer); char *response = "ACK"; send(new_socket, response, strlen(response), 0); printf("Server sent: %s\n", response); } // 6. 关闭 socket 描述符 close(new_socket); close(s); return 0;}
  • 编译项目

    • 在 Xcode 中,选择项目根目录,按下 cmd + R 运行。
    • 确保编译成功无误后,服务器端程序就可以运行了。
  • Objective-C TCP 客户端实现

    以下是客户端的详细实现步骤:

  • 创建客户端项目

    • 类似地,在 Xcode 中创建一个新的 Command Line Tool 项目,命名为 TCPClient。
  • 实现客户端逻辑

    • 在 main.m 文件中,添加以下代码:
      #import 
      #import
      #import
      #import
      int main(int argc, char **argv) { // 1. 创建 socket 描述符 int s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket failed"); return 1; } // 2. 连接服务器 struct sockaddr_in addr = {0}; addr.sin_family = AF_INET; addr.sin_port = htons(8080); addr.sin_addr = INADDR_ANY; if (connect(s, (socklen_t *)&addr, sizeof(addr)) == -1) { perror("connect failed"); return 1; } // 3. 发送消息 char *message = "Hello, World!"; int message_len = strlen(message); send(s, message, message_len, 0); printf("Client sent: %s\n", message); // 4. 接收服务器响应 char buffer[1024]; int read_size = recv(s, buffer, sizeof(buffer), 0); if (read_size == -1) { printf("Connection closed by server\n"); return 1; } printf("Client received: %s\n", buffer); // 5. 关闭 socket 描述符 close(s); return 0;}
  • 编译客户端项目

    • 类似于服务器端,按下 cmd + R 运行项目,确保编译成功。
  • 总结

    通过以上步骤,我们成功实现了一个简单的 TCP 网络通信服务器和客户端。服务器端可以监听指定端口,接收客户端连接并进行消息交流;客户端则可以连接到服务器,发送消息并接收响应。这个实现基于 BSD 套接字 API,适合在 macOS 平台上创建命令行工具。

    转载地址:http://akifk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现histogram stretch直方图拉伸算法(附完整源码)
    查看>>
    Objective-C实现Hopcroft算法(附完整源码)
    查看>>
    Objective-C实现horizontal projectile motion平抛运动算法(附完整源码)
    查看>>
    Objective-C实现hornerMethod霍纳法算法(附完整源码)
    查看>>
    Objective-C实现Http Post请求(附完整源码)
    查看>>
    Objective-C实现http下载文件 (附完整源码)
    查看>>
    Objective-C实现Http协议下载文件(附完整源码)
    查看>>
    Objective-C实现huffman哈夫曼编码算法(附完整源码)
    查看>>
    Objective-C实现ID3贪心算法(附完整源码)
    查看>>
    Objective-C实现IIR 滤波器算法(附完整源码)
    查看>>
    Objective-C实现IIR数字滤波器(附完整源码)
    查看>>
    Objective-C实现insertion sort插入排序算法(附完整源码)
    查看>>
    Objective-C实现integer partition整数分区算法(附完整源码)
    查看>>
    Objective-C实现integerPartition整数划分算法(附完整源码)
    查看>>
    Objective-C实现interpolation search插值搜索算法(附完整源码)
    查看>>
    Objective-C实现Interpolation search插值查找算法(附完整源码)
    查看>>
    Objective-C实现intersection交集算法(附完整源码)
    查看>>
    Objective-C实现intro sort内省排序算法(附完整源码)
    查看>>
    Objective-C实现inverse matrix逆矩阵算法(附完整源码)
    查看>>
    Objective-C实现inversions倒置算法(附完整源码)
    查看>>