博客
关于我
Objective-C实现局域网双向通信(附完整源码)
阅读量:794 次
发布时间:2023-02-20

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

Objective-C实现局域网双向通信

在局域网环境中实现双向通信,常用的协议包括UDP和TCP。本文将使用TCP协议提供一个简单的实现示例。我们将创建一个客户端和服务器应用程序,服务器监听客户端连接请求,客户端发送消息到服务器并接收响应。

TCP服务器(Server)

// Server.m

#import <Foundation/Foundation.h>

@interface TCPServer : NSObject

@end

@implementation TCPServer

  • (void)startServerWithPort:(int)port {

    // 服务器socket创建

    int socketFD = socket(port, SOCK_STREAM, 0);

    // 绑定IP和端口

    if (bind(socketFD, &sin_addr, sizeof(sin_addr)) == 0) {

    NSLog(@"服务器绑定成功");

    } else {

    NSLog(@"绑定失败");

    }

    // listen

    if (listen(socketFD, backlog) == 0) {

    NSLog(@"服务器处于监听状态");

    } else {

    NSLog(@"监听失败");

    }

}

  • (void)acceptClient {

    struct sockaddr_in client_addr;

    int new_socketFD = socket( AF_INET, SOCK_STREAM, 0 );

    if (new_socketFD == 0) {

    return;

    }

    int opt = 1;

    if (setsockopt(new_socketFD, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {

    NSLog(@"setsockopt失败");

    }

    if (bind(new_socketFD, &client_addr, sizeof(client_addr))) {

    NSLog(@"绑定失败");

    }

    if (listen(new_socketFD, backlog) == 0) {

    NSLog(@"监听成功");

    } else {

    NSLog(@"监听失败");

    }

    while (true) {

    int addrlen = sizeof(client_addr);  int new_clientFD = accept(new_socketFD, &client_addr, &addrlen);  if (new_clientFD == -1) {      NSLog(@"接受失败");      break;  }  // 处理客户端连接  // 读取消息  char buffer[1024];  int read_size = read(new_clientFD, buffer, sizeof(buffer));  if (read_size == -1) {      NSLog(@"读取失败");  } else {      // 处理消息      // 写回响应      char response[1024];      // 组装响应      // 写回      write(response, sizeof(response), new_clientFD);  }  // 关闭连接  close(new_clientFD);

    }

    close(new_socketFD);

}

@end

TCP客户端(Client)

// Client.m

#import <Foundation/Foundation.h>

@interface TCPClient : NSObject

@end

@implementation TCPClient

  • (void)startClientWithHost:(NSString *)host andPort:(int)port {

    // 创建socket

    int socketFD = socket(AF_INET, SOCK_STREAM, 0);

    if (socketFD == 0) {

    return;

    }

    // 设置IP和端口

    struct sockaddr_in target_addr;

    target_addr.sin_addr = *(struct sockaddr *)host.UTF8String;

    target_addr.sin_port = htons(port);

    target_addr.sin_family = AF_INET;

    // 绑定本地地址

    if (bind(socketFD, &target_addr, sizeof(target_addr))) {

    NSLog(@"绑定失败");

    }

    // 超时

    int opt = 1;

    if (setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {

    NSLog(@"setsockopt失败");

    }

    // 连接服务器

    if (connect(socketFD, &target_addr, sizeof(target_addr))) {

    NSLog(@"连接成功");

    } else {

    NSLog(@"连接失败");

    }

    // 读取服务器响应

    char buffer[1024];

    int read_size = read(socketFD, buffer, sizeof(buffer));

    if (read_size == -1) {

    NSLog(@"读取失败");

    }

    // 关闭socket

    close(socketFD);

}

  • (void)sendMessage:(NSString *)message {

    // 发送消息

    char *msg = message.UTF8String;

    int msg_length = strlen(msg);

    int send_size = send(socketFD, msg, msg_length, 0);

    if (send_size == -1) {

    NSLog(@"发送失败");

    }

}

@end

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

你可能感兴趣的文章
Objective-C实现多项式哈希算法(附完整源码)
查看>>
Objective-C实现大位数乘法(附完整源码)
查看>>
Objective-C实现大小端数转换(附完整源码)
查看>>
Objective-C实现大根堆(附完整源码)
查看>>
Objective-C实现奇偶检验码(附完整源码)
查看>>
Objective-C实现奇偶转置排序算法(附完整源码)
查看>>
Objective-C实现奇异值分解SVD(附完整源码)
查看>>
Objective-C实现奎因-麦克拉斯基算法(附完整源码)
查看>>
Objective-C实现子集总和算法(附完整源码)
查看>>
Objective-C实现子集数的总和等于给定的数算法(附完整源码)
查看>>
Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
查看>>
Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
查看>>
Objective-C实现字符串IP地址转DWORD地址(附完整源码)
查看>>
Objective-C实现字符串jaro winkler算法(附完整源码)
查看>>
Objective-C实现字符串levenshtein distance编辑距离算法(附完整源码)
查看>>
Objective-C实现字符串manacher马拉车算法(附完整源码)
查看>>
Objective-C实现字符串split函数功能算法(附完整源码)
查看>>
Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
查看>>
Objective-C实现字符串word patterns单词模式算法(附完整源码)
查看>>
Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
查看>>