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 ;
}
Tagged on: , , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>