69 lines
2.9 KiB
Plaintext
69 lines
2.9 KiB
Plaintext
提供ssocket.h库文件以提供在windows和linux使用通用函数用于更好的跨平台实现tcp-ipv4与tcp-ipv6(将来提供更多功能)
|
||
提供tthread.h库文件以提供在windows和linux使用通用函数用于更好的跨平台实现线程函数(将来提供更多功能)
|
||
|
||
版本见version.txt
|
||
|
||
测试用例:
|
||
所有test用例使用cmake构建
|
||
(server测试用例属于线程不安全程序(仅用于测试ssocket.h),不可用实际项目)
|
||
|
||
函数文档:
|
||
(函数文档全部采用markdown格式即*.md,可以使用VS打开,推荐使用专用markdown编辑器打开,不推荐以文本类型(.txt)打开)
|
||
函数文档见doc.md
|
||
|
||
案例讲解:
|
||
客户端伪代码解释:
|
||
1.make_client_sock();
|
||
使用该函数创建面向服务器的套接字描述符
|
||
2.sock_connect();
|
||
判断make_client_sock返回值若表示连接服务器失败可以尝试用此函数重连
|
||
3.连接完成后可以使用recv和send互相通信(具体见后续讲解)
|
||
|
||
服务器伪代码解释:
|
||
1.make_server_sock();
|
||
使用该函数创建服务器的套接字描述符
|
||
2.sock_accpet();
|
||
注意该函数为阻塞函数
|
||
当有客户端发起连接时该函数返回相应连接的客户端的套接字描述符
|
||
3.连接完成后可以使用recv和send互相通信(具体见后续讲解)
|
||
|
||
recv和send函数讲解:
|
||
send函数的套接字描述符是向相应套接字发送内容
|
||
recv同上,接收相应的内容
|
||
比如:
|
||
make_client_sock()返回的是连接到服务器的描述符,用于和服务器通信
|
||
make_server_sock()返回的是服务器的描述符,用于监听自己是否被连接
|
||
sock_accpet()返回的是连接进服务器的客户端的描述符,用于和连接的那个客户端通信
|
||
sock_connect()用于改变连接到服务器的地址,同样用于和服务器通信
|
||
|
||
线程函数伪代码解释:
|
||
1.thread_create()用于创建线程函数其中start_routine为返回类型void,参数为void*的函数指针
|
||
arg用于将参数传递进start_routine函数内
|
||
|
||
2.thread_mutex_init()该类型函数使用thread_mutex_lock(),thread_mutex_unlock()实现
|
||
对于一块代码的加锁访问,以实现线程同步 (WARNING注意thread_mutex_unlock及时释放锁防止线程死锁)
|
||
|
||
3.thread_cond_init()该类型函数与thread_mutex_init()等配合使用,常用于同步线程
|
||
|
||
示例:
|
||
MUTEX mutex;
|
||
COND cond;
|
||
|
||
//初始化相关资源
|
||
thread_mutex_init(&mutex);
|
||
thread_cond_init(&cond);
|
||
|
||
//进入线程同步区域
|
||
thread_mutex_lock(&mutex);
|
||
...
|
||
//进入该函数会阻塞于此直到调用
|
||
//thread_cond_singal(唤醒一个),thread_cond_broadcast(唤醒所有)
|
||
//唤醒才可以返回,以取消阻塞
|
||
thread_cond_wait(&cond, &mutex);
|
||
...
|
||
thread_mutex_unlock(&mutex);
|
||
//离开线程同步区域
|
||
|
||
4.tprintf()等类型输出函数格式为 t*()
|
||
eg. t + printf => tprintf
|
||
这类函数须在第一个参数前添加有效的mutex,用于实现线程同步,保证线程安全(我也不知道属不属于可重入函数) |