📄 server.c
字号:
//服务器端 跟普通的UDP服务器完全相同,除了IP地址设置成多播地址外
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<net/if.h>
const char *str = "broadcast from server";
int main( int argc, char **argv )
{
int sockfd;
struct sockaddr_in servaddr;
u_char ttl = 12;
sockfd = socket( AF_INET, SOCK_DGRAM, 0 );
if( sockfd == -1 )
perror( "socket" );
if( argc != 2 )
{
printf( "usage: %s 224.0.0.1\n", argv[0] );
exit(1);
}
memset( &servaddr, 0 , sizeof(servaddr ) );
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons( 10000 );
inet_pton( AF_INET, argv[1], &servaddr.sin_addr.s_addr );
//服务器可以不用设置该选项
if( setsockopt( sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl) ) < 0) //指定外出多播数据报的TTL
{
perror( "server setsockopt IP_MULTICAST_TTL " );
exit(1);
}
perror( "server setsockopt IP_MULTICAST_TTL " );
bind( sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr) ); //绑定
while(1)
{
if( sendto( sockfd, str, strlen(str), 0, (struct sockaddr *)&servaddr, sizeof(servaddr) ) < 0 ) //给多播地址发送消息
{
perror( "sendto error" );
exit(1);
}
sleep(1);
}
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -