TCP/UDP socket开发框架
在没有使用框架之前觉得没必要用框架,可能是因为代码量也不大,所以更习惯把全部代码都放到一个文件里。不过现在想想,能用框架的话,还是尽可能用吧。这样代码看上去就会简洁明了些。
之前老师给我们的上课例子中就用了TCP/UDP协议框架。所以这次我是参考了老师给的开发框架进行修改。很不好意思的是,其实基本上没做什么质的修改,只是修改了几个参数的调用。因为TCP/UDP协议的socket编程流程基本上是固定死的。基本上就是socket()、connect()、bind()、listen()这几个函数的调用。UDP相对简单点,因为是无连接协议,所以服务器端用不到bind、和listen,客户端也不用connect()函数。
我已经把TCP/UDP协议socket开发框架打包了。点击下载
无论是TCP协议还是UDP协议都可以用这个框架。不过框架并不是万能的,不一定能满足所有开发需求,但还是可以在此基础上通过修改来构建更加好用的开发框架。
为了做对比,下面是用了框架后的TCP客户端代码:
#include "sock_common.h" #define BUFFER_SIZE 500 /* * 编译的时候需要和sock_common.c一起编译,否则函数将无法调用 */ void main(int argc, char *argv[]) { SOCKET client_sock; int Ret; int nTotalBytes; const int port=7000; //指定端口号为7000 char pBuffer[BUFFER_SIZE]; //保存从服务器接收到的数据 if (argc <= 2) { printf("USAGE: %s <Server IP> <Word>.\n",argv[0]); return; } //初始化WSA if ((Ret = WinSockInit()) != 0) { printf("WSAStartup failed with error %d \n",Ret); return; } //创建socket,并连接到服务器 client_sock=connectTCP(argv[1], port ); //向服务器send数据 send(client_sock,argv[2],strlen(argv[2]),0); nTotalBytes = 0; //从服务器recv数据 while(1) { Ret = recv(client_sock,pBuffer,BUFFER_SIZE,0); if (Ret == SOCKET_ERROR) { sockerror("Receive data failed!"); closesocket(client_sock); WinSockDestroy(); return; } if (Ret == 0) break; nTotalBytes += Ret; pBuffer[Ret] = '\0'; printf(pBuffer); } //关闭socket closesocket(client_sock); // 注销WSA WinSockDestroy(); return ; }
- RSA加密算法
- Go语言"读"后感