資源簡介
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)
- 上一篇:bpsk在瑞利信道下的誤碼率與信噪比的關系
- 下一篇:Django個人博客系統 課件
評論
共有 條評論