基于ObjectiveC开发的引用了dylib的Socket通讯命令行
1. 概述
上一篇文章讲:基于ObjectiveC开发的Socket通讯动态库
在此基础上,本文介绍ObjectiveC 如何引用该dylib
2. 引用dylib简化源文件版本管理
直接引用源文件目录如下:

以上SocketHelper.m和SocketPort.m 其实可以打包成一个库文件,这样做的目的就是简化源文件的版本管理(即:当多个项目都引用了SocketHelper时,且SocketHelper重大升级,如果不能打包成库文件,将需要替换升级SocketHelper.m多次,且SocketHelper.m文件本身没有版本号标识,不能轻易版本识别。)
打包成库文件后再引用目录如下:请添加图片描述

1)引用libSocketHelper.dylib库文件
a. 右键-Add Files to

b. 选择生成库文件的文件夹
注意勾选 ☑️ Copy items if needed

Add 后如下位置会自动设置OK,不需要再点➕添加

然后再以同样的方式添加库中所用到的2个头文件:SocketPort.h/SocketHelper.h
c. 设置 Library Search Paths
如果上一步勾选 ☑️ Copy items if needed,则这一步会自动设置完成
设置完成画面

正常是空白状态,双击空白:输入$(PROJECT_DIR)/SocketTool

d. Build完成
在Build前要手动把刚才引用的库文件复制到SocketTool的生成目录,否则编译时也会报错

3)可能出现的异常
a. 找不到库文件

原因1: 如果文件名是红色,库文件可能不在设置的Library Search Paths路径里
原因2: 如果文件名颜色正常,引用的库文件没有复制到SocketTool的生成目录(我就在这里卡住了,找了好久才找到原因。如果是VS会自动复制到生成目录的呀,不知道Xcode如何设置成自动复制)
3. 命令行开发及代码测试
main.m入口函数如下
#import <Foundation/Foundation.h>
#import "SocketHelper.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
SocketHelper *sp = [SocketHelper new];
// NSString *portIP = [NSString stringWithUTF8String:(char *) argv[1]];
// NSNumber *port = [NSNumber numberWithInt:(atoi(argv[2]))];
NSString *portIP = @"127.0.0.1";
NSNumber *port = @7600;
BOOL rst = [sp openPort:portIP Port:port];
char *rst_str = rst ? "OK" : "NG";
printf("openPort:%s with %i result=%s\n",[portIP UTF8String],[port intValue] ,rst_str);
if(!rst) return -1;
[sp sendStr:@"Hello!\r\n"];
[NSThread sleepForTimeInterval:0.1];
NSString * readStr = [sp.clientPort readStrOnce];
// NSString * readStr = [sp sendReadStr:@"Hello!\r\n" readEndBy:'H'];
// NSString * readStr =[sp sendReadHex:@"0D" expect_nBytes:3];
printf("result=%s\n" ,[readStr UTF8String]);
[sp closePort];
}
return 0;
}
测试需要的环境:
TCPServer: 127.0.0.1:7600
且收到Hello!\r\n会自动回复Hi!\r\n
以下工具(类似工具请自行下载)截图仅供参考:

运行成功画面:

源码下载
161

被折叠的 条评论
为什么被折叠?



