- 論壇徽章:
- 0
|
網(wǎng)絡(luò)環(huán)境是這樣的:
有三個(gè)主機(jī)A,B,C均運(yùn)行l(wèi)inux,
A的ip是192.168.0.11
B的ip是192.168.0.12
C是雙網(wǎng)卡,兩個(gè)ip分別是192.168.0.13和10.1.1.111(該ip隨便設(shè)置的)。
ABC間可以相互通信,但A,B只能通過(guò)C向外發(fā)(即10.1.1.X網(wǎng)段)送數(shù)據(jù)。
需實(shí)現(xiàn):在C上廣播,但不期望在A,B收到廣播。
請(qǐng)問(wèn)是不是可以通過(guò)在C上作簡(jiǎn)單的路由配置就可以實(shí)現(xiàn)以上目地,還是說(shuō)在程序上作相應(yīng)的改動(dòng)。
C上的廣播程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/epoll.h>
#include<pthread.h>
int main()
{
char msg[128] = "I am broadCast message from server!";
int brdcFd;
int optval = 1;//這個(gè)值一定要設(shè)置,否則可能導(dǎo)致sendto()失敗
int sendBytes,len;
struct sockaddr_in theirAddr;
if((brdcFd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
{
printf("socket fail\n");
return -1;
}
setsockopt(brdcFd,SOL_SOCKET,SO_BROADCAST | SO_REUSEADDR,&optval,sizeof(int));
memset(&theirAddr, 0, sizeof(struct sockaddr_in));
theirAddr.sin_family = AF_INET;
theirAddr.sin_addr.s_addr = inet_addr("255.255.255.255");
theirAddr.sin_port = htons(4001);
while(1)
{
len = strlen(msg);
sendBytes = sendto(brdcFd,msg,len,0,(struct sockaddr *)&theirAddr,sizeof(struct sockaddr));
if(-1 == sendBytes)
{
printf("sendto fail, errno=%d\n", errno);
return -1;
}
printf("msg=%s, msgLen=%d, sendBytes=%d\n", msg, strlen(msg), sendBytes);
sleep(3);
}
close(brdcFd);
return 0;
}
謝謝各位大神! |
|