1,本例子使用一臺PC,有兩個網(wǎng)口,OS為CENTOS 6.8,然后使用兩條網(wǎng)線分別都連接到同一個交換機上,當(dāng)數(shù)據(jù)經(jīng)過交換機時,交換機的數(shù)據(jù)燈會閃爍,否則就沒有數(shù)據(jù)通過交換機。

創(chuàng)新互聯(lián)公司是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)絡(luò)營銷、企業(yè)網(wǎng)站建設(shè),買鏈接,廣告投放平臺為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計到用戶體驗提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
2,開始測試,剛開始理所當(dāng)然的想到的是TCP Server/TCP Client模式,建立socket
int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);
struct sockaddr_in server_sockaddr;
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(MYPORT);
server_sockaddr.sin_addr.s_addr = inet_addr(IP_PORT_0);
if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1)
{
perror("bind");
exit(1);
}
if(listen(server_sockfd,QUEUE) == -1)
{
perror("listen");
exit(1);
}
char buffer[BUFFER_SIZE];
struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr);
int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length);
if(conn<0)
{
perror("connect");
exit(1);
}
while(1)
{
memset(buffer,0,sizeof(buffer));
int len = recv(conn, buffer, sizeof(buffer),0);
send(conn, buffer, len, 0);
}
close(conn);
close(server_sockfd);
return 0;
}TCP Client端同樣寫相應(yīng)代碼,編譯通過,先后執(zhí)行server/client程序,顯示都有數(shù)據(jù)收發(fā)成功,但交換機的數(shù)據(jù)燈沒有任何顯示,于是明白了,系統(tǒng)默認直接從本地發(fā)送接收數(shù)據(jù),并沒有從網(wǎng)卡端口實際發(fā)送出去,因為TCP是基于IP協(xié)議之上,而IP協(xié)議是肯定走本地內(nèi)部路由,因此使用TCP,UDP等IP之上的協(xié)議肯定不會成功。
int init_sock (char index[IFNAMSIZ])
{
int fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
struct sockaddr_ll sll;
struct ifreq ifr;
strncpy(ifr.ifr_name, index , IFNAMSIZ);
ioctl(fd, SIOCGIFINDEX, &ifr);
bzero(&sll, sizeof(sll));
sll.sll_ifindex = ifr.ifr_ifindex;
ioctl(fd, SIOCGIFHWADDR, &ifr);
memcpy(sll.sll_addr,ifr.ifr_hwaddr.sa_data,6);
sll.sll_family = AF_PACKET;
sll.sll_protocol = htons(ETH_P_ALL);
bind(fd,(struct sockaddr *)&sll,sizeof(sll));
return fd;
}使用如上RAW Socket初始化后,再發(fā)送接收,一切OK!!!,能夠接收到除了CRC之外的完整鏈路層幀,包括MAC地址,幀類型字段等,程序發(fā)送接收時,交換機的數(shù)據(jù)燈不停閃爍。
分享名稱:用C語言socketRAW功能實現(xiàn)同一臺主機兩個網(wǎng)口間數(shù)據(jù)收發(fā)
當(dāng)前鏈接:http://chinadenli.net/article20/ggjhjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、移動網(wǎng)站建設(shè)、Google、定制網(wǎng)站、網(wǎng)站策劃、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)