网络编程--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;
}
执行效果:

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

网络编程UDP通信

  • 2014年03月15日 00:47
  • 736KB
  • 下载

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

Java网络编程中的TCP,UDP通信方式详解 1. TCP方式与UDP方式的区别。 2. TCP方式所使用的方法:Socket,ServerSocket以及服务端与客户端通信实例。 3. ...

Java网络编程四 非阻塞通信UDP

转自 http://blog.csdn.net/alangdangjia/article/details/9065845 import java.io.BufferedReader;...

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识...

[python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,Python网络编程也类似。同时最近找工作笔试面试考察Socket套接字、TCP\UDP区别比较多,所以这篇文章主要精简了《Python核心编程(第二版)》第16...

linux网络编程(如何编写一个UDP通信程序)

UDP数据通讯原理      UDP数据通讯分服务端(软件)和客户端端:      服务端(软件)(服务器)先运行,服务端,不需要事先知道客户端IP和port      客户端(软件)(客户端机...

网络编程中的UDP通信

之前的网络编程主要针对的是TCP协议,现在总结一下学习UDP协议的知识点!基本概念  传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议。TCP协议在网络通信中占主导地位,绝大多...
  • lzjsqn
  • lzjsqn
  • 2016年12月23日 11:08
  • 525

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

1、sendto和recvfrom函数介绍 sendto(经socket传送数据) 相关函数 send , sendmsg,recv , recvfrom , socket 表头文...

Java 网络编程(六) 使用无连接的数据报(UDP)进行通信

使用无连接的数据报(UDP)进行通信 什么是Datagram?   数据报是网上传输的独立数据包,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。     Java中使...

线程与网络编程(第五节:UDP的扩展与双工通信)

1.UDP Socket的扩展 (1)默认分配端口号 OS_SockAddr local; OS_UdpSocket sock; sock.open(local,true);//不设置本地端口...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程--UDP通信
举报原因:
原因补充:

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