网络编程--UDP通信

原创 2013年12月03日 17:21:54

UDP是面向无连接类型的传输服务,允许不建立好对话关系可进行数据发送。

UDP_SERVER:

1.    创建一个socket套接字,用socket()函数

2.    绑定ip和端口号到socket,用bind

3.    循环接收数据recvfrom(),用词函数可以进入阻塞状态

4.    关闭网络连接

      注:intrecvfrom(socket s, void *buf, int len, unsigned int flags, struct sockaddr*from, int *fromlen)

      成功:接收字符数 失败: -1

功能:用来接收远程主机指定的socket传来的数据,来源的网络地址from接收数据,存放到缓冲区buf里面去,len为buf所能接受的最大字节数,flags为0,fromlen网络地址大小

UDP_client:

1.    创建一个socket套接字,用socket()函数

2.    绑定ip和端口号到socket,用bind()可选

3.    设置对方ip和端口熟悉

4.    发送数据,用sendto

5.    关闭连接

注意:intsendto(socket s, const void *msg, int len, unsigned int flags, const structsockaddr *to, int tolen);

sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0,发给网络地址to

以下代码:

UDP_server端:

// UDP program text,this is a UDP server
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>

#define portnumber 4321

int main()
{
	int sockfd,nbyte;
	struct sockaddr_in UDP_server;
	char buf[1024];	

	sockfd = socket(AF_INET,SOCK_DGRAM,0);	//create socket
	if(-1 == sockfd)
	{
		perror("create socket error: ");
		exit(1);
	}
	
	/*fill in IP and port number message*/
	bzero(&UDP_server,sizeof(struct sockaddr_in));   //clear
	UDP_server.sin_family = AF_INET;	
	UDP_server.sin_port = htons(portnumber);
	UDP_server.sin_addr.s_addr = htonl(INADDR_ANY);

	if(-1 == bind(sockfd,(struct sockaddr *)(&UDP_server),sizeof(struct sockaddr)))
	{
		perror("bind ip to socket error:");
		exit(1);
	}
	
	while(1)
	{
		nbyte = sizeof(struct sockaddr_in);
		nbyte = recvfrom(sockfd,buf,1024,0,(struct sockaddr *)(&UDP_server),&nbyte);
		if(-1 == nbyte)
		{
			perror("recvfrom data error!:");
			exit(1);
		}
		buf[nbyte] = '\0';
		printf("Get message succed!\n %s \n",buf);
		bzero(buf,1024);
	}
	close(sockfd);
	return 0;
}

UDP_client端:

// UDP text, this is a UDP client
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <netinet/in.h>

#define portnumber 4321

int main(int argc,char *argv[])
{
	int sockfd,nbyte;
	struct sockaddr_in UDP_client;
	char buf[1024];	

	if(argc != 2)
	{
		printf("input error!\n");
		exit(1);
	}
	sockfd = socket(AF_INET,SOCK_DGRAM,0);
	if(sockfd == -1)
	{
		perror("create client ocket error:\n");
		exit(1);
	}
	
	bzero(&UDP_client,sizeof(struct sockaddr_in));
	UDP_client.sin_family = AF_INET;
	UDP_client.sin_port = htons(portnumber);
	if(inet_aton(argv[1],&(UDP_client.sin_addr)) < 0)
	{
		perror("aton error: \n");
		exit(1);
	}
	
	while(1)
	{
		printf("Please input:\n");
		fgets(buf,1024,stdin);
		nbyte = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)(&UDP_client),sizeof(struct sockaddr));
		if(nbyte < 0)
		{
			perror("send error:\n");
			exit(1);
		}
		printf("send succed: %s\n",buf);
		bzero(buf,nbyte);
	}
	close(sockfd);
	return 0;
}
执行效果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android网络编程TCP、UDP(一)

一、TCP与UDP简介TCP和UDP都属于TCP/IP参考模型中传输层的协议,且都是基于网际互联层IP协议。一位大神作了一个很形象的比喻:TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把...
  • a10615
  • a10615
  • 2016年09月01日 02:21
  • 4895

Java网络编程中的TCP,UDP通信方式详解

Java网络编程中的TCP,UDP通信方式详解 1. TCP方式与UDP方式的区别。 2. TCP方式所使用的方法:Socket,ServerSocket以及服务端与客户端通信实例。 3. ...
  • u013309870
  • u013309870
  • 2016年08月04日 17:27
  • 893

C/C++实现基于UDP的网络编程

在网络编程中,我们一般用UDP或者TCP这两种协议来进行编写网络应用程序,那叫UDP呢? UDP:UDP的简称是User Datagram Protocol,中文名是用户数据报协议,是OSI 参考模...
  • nonecode
  • nonecode
  • 2012年09月12日 17:04
  • 8423

Linux网络编程 之 UDP 广播

最近一直在做linux的网络,现在作个总结,陆续贴出来。 在网上搜了很多资料 ,其中周立发的博客对我的学习参考作用最大,谢谢前辈。 这个倒让我花的时间最多了,主要一直脑残的在自己的虚拟机上调试不...
  • yanyuanfen2011
  • yanyuanfen2011
  • 2013年11月22日 18:24
  • 4442

《MFC网络通信》Part 1 简单UDP通信

《MFC网络通信》Part 1 简单的UDP通信                                                                           ...
  • sinat_24206709
  • sinat_24206709
  • 2016年03月16日 10:21
  • 2355

MFC下的网络编程(1)CAsyncSocket进行无连接(UDP)通信

MFC下的网络编程(1)CAsyncSocket进行无连接(UDP)通信   (2014-06-14 19:54:00) 转载▼ 标签:  it 分类:...
  • afu1972715000
  • afu1972715000
  • 2015年01月21日 09:29
  • 1143

QT5 下udp 编程实例

下面是一个简单的QT5下的udp通信的下例子。服务器不停的利用定时器来向socket发送广播消息,客户端可以接收该消息并显示。首先建立工程UdpServer.pro。建立各控件的布局。udpserve...
  • bullzerone
  • bullzerone
  • 2015年12月05日 15:53
  • 1062

VS2010编写UDP网络通信程序的问题(借用孙鑫老师《深入VC++》书中程序)

一开始安照老师书上写的程序敲上去后,按照先服务器端后客户端的编译顺序,编译结果总是“烫烫烫”,网上查找了“烫烫烫”的原因,因为在这本书上面有个不好的编程习惯,他没有把数组初始化,所以每次输出的是不确定...
  • qq_34037046
  • qq_34037046
  • 2017年08月23日 00:40
  • 311

嵌入式Linux网络编程 之 简单的UDP网络编程

关于用户数据报文协议(UDP): UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。而且UDP提供的是不可靠的非连接型的传输层服务...
  • u011467781
  • u011467781
  • 2015年08月24日 16:29
  • 1114

网络编程:TCP 与 UDP 的区别

1.TCP与UDP在概念上的区别: Tcp是一种面向连接的,可靠的字节流服务。(设有数据包编号与差错控制机制。) 特点: 由于网络的复杂性,传输信息时,数据包可能会丢失,差错控制中的确认...
  • fmoonstar
  • fmoonstar
  • 2011年10月09日 10:18
  • 4288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程--UDP通信
举报原因:
原因补充:

(最多只允许输入30个字)