dev 强制转换制表符

This commit is contained in:
zzy 2023-10-27 12:57:30 +08:00
parent 86042281ae
commit a59a9e3278
3 changed files with 49 additions and 141 deletions

View File

@ -1,132 +1,40 @@
提供ssocket.h库文件以供在windows和linux帮助tcp-ipv4的实现
未来将提供udp-ipv4及相应ipv6实现
版本号:1.0.2
测试用例:
所有test用例使用cmake构建
在test文件夹下存在windows的可执行程序可用于测试
注意server文件忽略多线程资源竞争的问题该问题将在未来解决
案例讲解:
客户端伪代码解释:
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()用于改变连接到服务器的地址,同样用于和服务器通信
提供ssocket.h库文件以提供在windows和linux使用通用函数用于更好的跨平台实现tcp-ipv4与tcp-ipv6(将来提供更多功能)
提供tthread.h库文件以提供在windows和linux使用通用函数用于更好的跨平台实现线程函数(将来提供更多功能)
版本见version.txt
测试用例:
所有test用例使用cmake构建
函数文档:
void sleeps(int s)
输入相应秒数,使相应线程暂停
void sleepms(int ms)
输入相应毫秒数,使相应线程暂停
int make_sock(SOCKET* sock)
作用:
提供sock变量的地址以此创建一个用于通信的socket套接字描述符
返回值:
(函数文档全部采用markdown格式即*.md,可以使用VS打开)
函数文档见doc.md
eg1.
SOCKET sock;
make_sock(&sock);
eg2.
SOCKET* psock = malloc(sizeof(SOCKET));
if(psock == NULL) exit(-1);
make_sock(psock);
...
free(psock);
同理:
int make_sock_tcp4(SOCKET* sock);
int make_sock_tcp6(SOCKET* sock);
int make_sock_udp4(SOCKET* sock);
int make_sock_udp6(SOCKET* sock);
int make_server_sock(SOCKET* sock, const char* server_ip, unsigned short port)
作用:
提供sock变量的地址服务器的IP若为NULL则默认为所有地址服务器监听的端口号0-65535
以此创建一个服务器的套接字描述符
返回值:
若返回0则成功否则失败
使用案例同make_sock
案例讲解:
客户端伪代码解释:
1.make_client_sock();
使用该函数创建面向服务器的套接字描述符
2.sock_connect();
判断make_client_sock返回值若表示连接服务器失败可以尝试用此函数重连
3.连接完成后可以使用recv和send互相通信具体见后续讲解
服务器伪代码解释:
1.make_server_sock();
使用该函数创建服务器的套接字描述符
2.sock_accpet();
注意该函数为阻塞函数
当有客户端发起连接时该函数返回相应连接的客户端的套接字描述符
3.连接完成后可以使用recv和send互相通信具体见后续讲解
int make_client_sock(SOCKET* sock, const char* connect_ip, unsigned short port)
作用:
提供sock变量的地址连接服务器的IP若为NULL则默认为不启用初始化连接需要自己调用sock_connect服务器监听的端口号0-65535
以此创建一个客户端(面向服务器的)套接字描述符
返回值:
若返回0则成功否则失败
使用案例同make_sock
recv和send函数讲解:
send函数的套接字描述符是向相应套接字发送内容
recv同上接收相应的内容
比如:
make_client_sock()返回的是连接到服务器的描述符,用于和服务器通信
make_server_sock()返回的是服务器的描述符,用于监听自己是否被连接
sock_accpet()返回的是连接进服务器的客户端的描述符,用于和连接的那个客户端通信
sock_connect()用于改变连接到服务器的地址,同样用于和服务器通信
int sock_connect(SOCKET sock, const char* connect_ip, unsigned short port)
作用:
使用make_sock等系列函数返回的套接字使其连接到目标IP/端口
用于客户端初始化,或者客户端重新连接新的服务器
返回值:
若返回0则成功否则失败
int sock_bindlisten(SOCKET sock, const char* server_ip, unsigned short port)
作用:
使用make_sock函数返回的套接字绑定并监听自身IP/端口
用于服务器套接字初始化
返回值:
若返回0则成功否则失败
int sock_accpet(SOCKET sock,SOCKET* client, char** accept_ip, unsigned short* port)
作用:
用于服务器接收客户端的连接(阻塞函数)
返回值:
若返回0则成功否则失败
void close_sock(SOCKET sock)
作用:
提供套接字描述符以此删除相关数据
void out_sock_err(FILE* output, int errcode)
作用:暂时未提供
void get_sock_err(char* buff_128, size_t buff_len, int errcode)
作用:暂时未提供
void sock_thread(void(*thread_func)(void*), void* data)
作用:
创建一个线程并执行线程函数
eg.
void thread_func(void* data) {
//do someting
if(data != NULL) {
free(data);
}
}
int main() {
int* data = malloc(sizeof(int));
sock_thread(thread_func, data);
}
内置函数文档
static inline int _socket(SOCKET* sock, const char* ip, const char* port);
static inline int _connect(SOCKET sock, const char* ip, const char* port);
static inline int _bind(SOCKET sock, const char* ip, const char* port);
static inline int _bindlisten(SOCKET sock, const char* ip, const char* port);
static inline int _sock(SOCKET* sock, int af, int type);
线程函数伪代码解释:
thread_create
thread_mutex_init()

View File

@ -25,7 +25,7 @@ typedef pthread_cond_t COND;
#define ZZY_SLEEP
#if _OS_WIN
#define sleeps(s) Sleep(s*1000)
#define sleepms(ms) Sleep(ms)
#define sleepms(ms) Sleep(ms)
#elif _OS_LINUX
#define sleeps(s) sleep(s)
#define sleepms(ms) usleep(ms*1000)
@ -219,9 +219,9 @@ static inline int thread_cond_timedwait(COND* cond, MUTEX* mutex, int ms) {
if (res == WAIT_TIMEOUT) { return -ERR_THREAD_COND_TIME_OUT; }
if (res == WAIT_FAILED) { return -ERR_THREAD_COND_TIMEDWAIT; }
#elif _OS_LINUX
struct timespec outtime;
clock_gettime(CLOCK_MONOTONIC, &outtime);
outtime.tv_sec += ms/1000;
struct timespec outtime;
clock_gettime(CLOCK_MONOTONIC, &outtime);
outtime.tv_sec += ms/1000;
outtime.tv_nsec += (ms % 1000) * 1000 * 1000;
int res = pthread_cond_timedwait(cond, mutex, &outtime);
if (res == ETIMEDOUT) { return -ERR_THREAD_COND_TIME_OUT; }

View File

@ -1,16 +1,16 @@
v1.0.1 dev
提供基础的windows与linux的跨平台tcp-ipv4协议
提供基础的windows与linux的跨平台tcp-ipv4协议
v1.0.2 dev
使用getaddrinfo重写部分内容,为未来兼容tcp/udp-ipv4/ipv6做准备
添加make_sock,make_sock_tcp4,make_sock_tcp6,make_sock_udp4,make_sock_udp6函数
添加若干内置函数(以_func形式)
兼容老版本
使用getaddrinfo重写部分内容,为未来兼容tcp/udp-ipv4/ipv6做准备
添加make_sock,make_sock_tcp4,make_sock_tcp6,make_sock_udp4,make_sock_udp6函数
添加若干内置函数(以_func形式)
兼容老版本
v1.0.3 dev
使用多头文件分离的方法将系统环境,线程,套接字分成三个文档
暂时兼容老版本,将在下个版本取消对前版本的兼容性
使用多头文件分离的方法将系统环境,线程,套接字分成三个文档
暂时兼容老版本,将在下个版本取消对前版本的兼容性
v1.0.4 alpha
通过了Windows和Linux的基础测试(测试仅包括tcp-ipv4,tcp-ipv6,测试不完全)
添加了tthread.h专用于Windows和Linux的线程函数,错误码方面函数未完工(注意可能低版本的Windows不支持)
添加bkfifo.h为后续线程池函数做准备
添加各个函数的函数文档,重构README.txt
取消部分函数兼容
通过了Windows和Linux的基础测试(测试仅包括tcp-ipv4,tcp-ipv6,测试不完全)
添加了tthread.h专用于Windows和Linux的线程函数,错误码方面函数未完工(注意可能低版本的Windows不支持)
添加bkfifo.h为后续线程池函数做准备
添加各个函数的函数文档,重构README.txt
取消部分函数兼容