资源简介

udp组播客户端和服务器端代码

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include  
#include 

#include “platform_head.h“
#include “uhttp.h“
#include “udp.h“


#define UDP_BUFLEN 512

//#define UDP_BROADCAST_IP   “239.255.255.250“
#define UDP_BROADCAST_IP   “255.255.255.255“
#define UDP_BROADCAST_PORT  1900
#define UDP_BROADCAST_HTTP_HEADER  “NOTIFY * HTTP/1.1\r\nBroadcast: %s:%d\r\n“


void udp_broadcast_ip(void *param);


int udp_open(UDP_MULTICAST_st *udp)
{
struct sockaddr_in local_addr;
int sockfd;
unsigned int socklen;

DEBUG_Print(“[%s][%d] : ip[%s] port[%d] mode[%d].\n“ \
UTI_TRACE udp->ip udp->port udp->broadcast_mode);

/* 创建 socket 用于UDP通讯 */
sockfd = socket(AF_INET SOCK_DGRAM 0);
if (sockfd < 0)
{
DEBUG_Print(“[%s][%d] : socket creating error .\n“ UTI_TRACE);
exit(1);
}

socklen = sizeof(struct sockaddr_in);
memset(&udp->addr 0 socklen);
udp->addr.sin_family = AF_INET;
/* 设置对方的端口和IP信息 */
if(udp->port == 0)
udp->port = 9000;
udp->addr.sin_port = htons(udp->port);
/* 设置组播或单播地址 */
if (inet_pton(AF_INET udp->ip &udp->addr.sin_addr) <= 0)
{
DEBUG_Print(“[%s][%d] : Multicast ip address convert error.\n“ UTI_TRACE);
return -2;
}

memset(&local_addr 0 socklen);
/* 设置自己的端口和IP信息 */
local_addr.sin_family = AF_INET;
/* 设置为0,表示让系统自动分配空闲端口 */
local_addr.sin_port = 0;
memset(udp->local_ip 0 sizeof(udp->local_ip));
NETWORK_GetIPAddr(NETWORK_INTERFACE_NAME udp->local_ip);
local_addr.sin_addr.s_addr = inet_addr(udp->local_ip);
if(local_addr.sin_addr.s_addr == INADDR_NONE)
{
local_addr.sin_addr.s_addr = INADDR_ANY;
DEBUG_Print(“[%s][%d] : Local ip convert error use INADDR_ANY.\n“ UTI_TRACE);
}

/* 绑定自己的端口和IP信息到socket上 */
if (bind(sockfd (struct sockaddr *)&local_addrsizeof(struct sockaddr_in)) == -1)
{
DEBUG_Print(“[%s][%d] : Bind error.\n“ UTI_TRACE);
return -5;
}
udp->sock = sockfd;
return sockfd;
}

int udp_open_client(UDP_MULTICAST_st *udp)
{
//struct sockaddr_in local_addr;
int sockfd;
//struct ifreq ifr;
struct ip_mreq multiCast;

DEBUG_Print(“[%s][%d] : ip[%s] port[%d] mode[%d].\n“ \
UTI_TRACE udp->ip udp->port udp->broadcast_mode);

/* 创建 socket 用于UDP通讯 */
sockfd = socket(AF_INET SOCK_DGRAM IPPROTO_UDP);
if (sockfd < 0)
{
DEBUG_Print(“[%s][%d] : socket creating error .\n“ UTI_TRACE);
exit(1);
}


memset(&udp->addr 0 sizeof(udp->addr));
udp->addr.sin_family = AF_INET;
udp->addr.sin_port = htons(udp->port);
udp->addr.sin_addr.s_addr = inet_addr(udp->ip);//inet_addr(udp->ip) INADDR_ANY

/* 绑定自己的端口和IP信息到socket上 */
if (bind(sockfd (struct sockaddr *)&udp->addrsizeof(struct sockaddr_in)) == -1)

评论

共有 条评论