博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket 指定网口收发数据
阅读量:4200 次
发布时间:2019-05-26

本文共 2105 字,大约阅读时间需要 7 分钟。

       在系统中,可能会有多片网口,工作在不同的网段,同时有不同的网关,socket需要绑定其中的一个网卡,进行网络的通信。
设置socket指定为eth1进行收发网络包:
#define INTERFAXENAME "eth1"    struct ifreq interface;    strncpy(interface.ifr_ifrn.ifrn_name, INTERFAXENAME, sizeof(INTERFAXENAME));    if (setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (char *)&interface, sizeof(interface))  < 0) {           perror("SO_BINDTODEVICE failed");    }
demo程序如下:
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUF_SIZE 1024#define INTERFAXENAME "eth1"int sock;void * network_recv_thread(void * arg){ int n = 0; char buff[BUF_SIZE]; struct sockaddr_in peer; int len = sizeof(peer); while(1) { n = recvfrom(sock, buff, BUF_SIZE, 0, (struct sockaddr *)&peer, &len); if (n>0) { buff[n] = 0; printf("received:"); puts(buff); } else if (n==0) { printf("server closed\n"); close(sock); break; } else if (n == -1) { perror("recvfrom"); close(sock); break; } } return NULL;}int main(int argc, char *argv[]){ int ret = 0; if (argc != 3) { printf("Usage: %s ip port\n", argv[0]); exit(1); } printf("This is a UDP client\n"); if ( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0) { perror("socket"); exit(1); } struct ifreq interface; strncpy(interface.ifr_ifrn.ifrn_name, INTERFAXENAME, sizeof(INTERFAXENAME)); if (setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (char *)&interface, sizeof(interface)) < 0) { perror("SO_BINDTODEVICE failed"); } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(atoi(argv[2])); addr.sin_addr.s_addr = inet_addr(argv[1]); if (addr.sin_addr.s_addr == INADDR_NONE) { printf("Incorrect ip address!"); close(sock); exit(1); } pthread_t pid; ret = pthread_create(&pid, NULL,network_recv_thread, NULL); if (ret) { printf("Create pthread error!\n"); return 0; } char buff[BUF_SIZE]; int n = 0; while (1) { gets(buff); n = sendto(sock, buff, strlen(buff), 0, (struct sockaddr *)&addr, sizeof(addr)); if (n < 0) { perror("sendto"); close(sock); break; } } pthread_join(pid, NULL); return 0;}
网络调试助手:

转载地址:http://sefli.baihongyu.com/

你可能感兴趣的文章
LoadRunner专题——关联 (Correlation)
查看>>
最近在翻译一本书——应用软件性能测试的艺术
查看>>
应用软件性能测试的艺术(翻译)——序
查看>>
高级性能测试(翻译)
查看>>
Web安全测试解决方案
查看>>
今天开始上班
查看>>
开源测试研究方案泡汤了
查看>>
晒一下我培训的课程——应用系统性能测试规划、实施与分析
查看>>
自动化测试框架之控制界面的关键
查看>>
自动化测试框架指南
查看>>
越来越强大的SAFS/STAF/STAX自动化测试框架
查看>>
透析QTP自动化测试框架SAFFRON
查看>>
利用 STAF 实现程序更新包的自动部署测试
查看>>
软件安全性测试转载自小龙虾博客
查看>>
软件安全性能测试(转载)
查看>>
开源工具在YAHOO测试体系中的应用
查看>>
周末参加“北京干部管理职业技术学院”关于高职课程改革的专家讨论会
查看>>
软件测试框架介绍
查看>>
软件自动化测试框架的发展
查看>>
软件测试框架——自动化测试框架(专题)
查看>>