您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:149 来源:vckbase.com

用udp协议通讯示例

作者:fs007

下载源代码
逆风编程技术

一、绪言
  udp是一种面向非连接,不可靠的通讯协议,相对于tcp来说,虽然可靠性不及,但传输效率较高。所以在网络上仍有很大的用途。这几日需要了解下udp通讯的过程,上网发现这方面的资料还挺少。于是仔细的翻找了下msdn,基本上搞清楚了udp通讯的过程。做了一个测试的例子。希望对大家有帮助。

二、udp的通讯过程

server端: open a socket(socket)--->name the socket(bind)--->send and receive data(sendto recvfrom)--->close socket(closesocket)
client端: open a socket(socket)---------------------------->send and receive data(sendto recvfrom)--->close socket(closesocket)

  server端无需listen,client端无需connect,因此udp中server和client的区别相对较模糊。只要调用sendto和recvfrom就可以给指定的地址收发数据,但并不保证收发的数据的完整性和可靠性。

三、示例
  udpserver主要代码:


void main()

{

	SOCKET socket1;



	InitWinsock();

	struct sockaddr_in local;

	struct sockaddr_in from;

	int fromlen =sizeof(from);

	local.sin_family=AF_INET;

	local.sin_port=htons(1000);             ///监听端口

	local.sin_addr.s_addr=INADDR_ANY;       ///本机



	socket1=socket(AF_INET,SOCK_DGRAM,0);

	bind(socket1,(struct sockaddr*)&local,sizeof local);

	while (1)

	{

		char buffer[1024]="\0";

		printf("waiting for message from others-------------\n");

		if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)

		{

			printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);

			////给cilent发信息

			sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);



		}

		Sleep(500);

	}

	closesocket(socket1);

}



udpcilent主要代码:

void main()

{

	SOCKET socket1;



	InitWinsock();

	struct sockaddr_in server;

	int len =sizeof(server);

	server.sin_family=AF_INET;

	server.sin_port=htons(1000);                      ///server的监听端口

	server.sin_addr.s_addr=inet_addr("168.168.0.10"); ///server的地址 



	socket1=socket(AF_INET,SOCK_DGRAM,0);

	while (1)

	{

		char buffer[1024]="\0";

		printf("input message\n");

		scanf("%s",buffer);

		if (strcmp(buffer,"bye")==0)

			break;

		if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)

		{	

			if (recvfrom(socket1,

                                        buffer,

                                        sizeof buffer,

                                        0,

                                        (struct sockaddr*)&server,&len) != SOCKET_ERROR)

				printf("rece from server:%s\n",buffer);

		}		

	}

	closesocket(socket1);

}

四、结束语
  udp通讯比tcp简单了很多,在数据可靠性不是很高的情况下,有使用的价值。

相关文章

SendMessage和PostMessage,total ordering
关于调试时输出的字符串信息
创建分层窗口,实现图像渐变
关于CEdit控件的透明 --作者:monsoon
think window procedure
DCT快速变换
如何提取网页中所有链接
用C#语言实现http协议下的多线程文件传输
如何选中其他程序ListView控件中的某个Item
在VC中调用 WebService (非托管)
用VC 制作QQ自动登陆软件
MFC程序员的WTL指南: Part II - WTL 界面基
COM 组件设计与应用(十)——IDispatch 接
一个简单的读写注册表实例
利用辅助线程更新用户界面UI
如何更改其它程序 ListView 控件中某个 Ite
如何在NT下获取进程的路径
ATL布幔之下的秘密(5)
定制编辑框的上下文菜单
初试驱动---OV511 摄像头驱动开发

相关评论


本文章所属分类:首页 VC++

  热门关键字: