在虚拟交换环境搭建完成之后,我们计划对sFlow监控虚拟交换流量进行实验,这就需要首先在两个虚拟机之间制造流量,我自己两段linux c的socket通信程序,基于UDP,让client向server发送数据包,直到我们按下任意字母键时停止。
命令的使用方式是:
client端:client.out serverIP serverPORT
server端:server.out serverPORT
按任意键发送停止的功能是使用一个 在linux下模拟windows下的kbhit函数实现的,具体代码如下:
server端:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#define MAXBUF 100
int main(int argc, char *argv[])
{
int server_sockfd;
int len;
struct sockaddr_in my_addr; //服务器网络地址结构体
struct sockaddr_in remote_addr; //客户端网络地址结构体
int sin_size;
char buf[MAXBUF]; //数据传送的缓冲区
memset(&my_addr,0,sizeof(my_addr)); //数据初始化--清零
my_addr.sin_family=AF_INET; //设置为IP通信
my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上
my_addr.sin_port=htons(atoi(argv[1])); //服务器端口号
if((server_sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
perror("socket");
return 1;
}
if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
{
perror("bind");
return 1;
}
sin_size=sizeof(struct sockaddr_in);
/*接收客户端的数据并将其发送给客户端*/
printf("connecting...");
while(1){
if((len=recvfrom(server_sockfd,buf,BUFSIZ,0,(struct sockaddr *)&remote_addr,&sin_size))<0) {
perror("recvfrom");
return 1;
}
buf[len]='\0';
if(strcmp(buf,"eof")==0) break;
}
printf("miss connecting...\n");
close(server_sockfd);
return 0;
}
client端:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#define MAXBUF 100
int kbhit(void); /*在linux中实现类似windows中kbhit功能的函数,实现不等待输入*/
int main(int argc, char *argv[])
{
int client_sockfd;
int len;
struct sockaddr_in remote_addr; //服务器端网络地址结构体
int sin_size;
char buf[MAXBUF]; //数据传送的缓冲区
memset(&remote_addr,0,sizeof(remote_addr)); //数据初始化--清零
remote_addr.sin_family=AF_INET; //设置为IP通信
remote_addr.sin_addr.s_addr=inet_addr(argv[1]);//服务器IP地址
remote_addr.sin_port=htons(atoi(argv[2])); //服务器端口号
if((client_sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
perror("socket");
return 1;
}
strcpy(buf,"keep connecting\n");
sin_size=sizeof(struct sockaddr_in);
/*向服务器发送数据包*/
printf("connecting...\n");
while(!kbhit()){
if((len=sendto(client_sockfd,buf,strlen(buf),0,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr)))<0)
{
perror("recvfrom");
return 1;
}
if(printf("cut '%c'\n",getchar())) break;
}
strcpy(buf,"eof");
printf("%s\n",buf);
sendto(client_sockfd,buf,strlen(buf),0,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr));
printf("miss connectng...\n");
close(client_sockfd);
return 0;
}
int kbhit(void)
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if(ch != EOF)
{
ungetc(ch, stdin);
return 1;
}
return 0;
}
分享到:
相关推荐
VMware虚拟机搭建Ubuntu--超详细,VMware虚拟机搭建Ubuntu--超详细,VMware虚拟机搭建Ubuntu--超详细,VMware虚拟机搭建Ubuntu--超详细,VMware虚拟机搭建Ubuntu--超详细,VMware虚拟机搭建Ubuntu--超详细,VMware虚拟机...
### VMware虚拟机系列全套教程-VMware虚拟机搭建教程 #### VMware虚拟机基本知识 - **定义**: VMware虚拟机是一种软件工具,它可以在一台物理计算机上创建并运行多个独立的操作系统实例,即所谓的“虚拟机”(VM)...
虚拟机VirtualBox-4.1.6-74713-Win
虚拟机VirtualBox-4.1.2-73507-Win 另外还有对应的扩展包
虚拟机全攻略⑥---虚拟机安装windows7之安装教程2,虚拟机目前虽然没有普遍使用,却是发展前景非常好,非常实用的好东西,刚才那个发错了,抱歉
虚拟机VirtualBox-7.0.4-154605-Win
- **启用共享功能**: 在虚拟机软件中配置共享文件夹,以便于主机与虚拟机之间交换文件。 - **访问共享文件夹**: 在XP系统中可以通过网络邻居等方式访问主机上的共享文件夹。 **3.2 其他细节** - **性能优化**: ...
2. 虚拟机可以在一台机器上同时运行几个操作系统,是SOHO开发一族的必备工具。有了虚拟机,在家里只需要一台电脑,或出差时只带着一个笔记本,就可以调试C/S、B/S的程序了。 3. 利用虚拟机可以进行软件测试。 三、...
本人亲测OK没问题 。202303实测。很好用的虚拟机VirtualBox-7.0.6-155176-Win-Win Oracle VM VirtualBox
VMware虚拟机软件使用指南 VMware是一种功能强大且广泛使用的虚拟机软件,它可以在一台电脑上模拟出多台PC,每台PC可以运行单独的操作系统,而互不干扰。使用虚拟机软件可以实现一台电脑“同时”运行几个操作系统...
VMware提供了直观的图形用户界面和丰富的功能,如虚拟机快照、克隆、挂起和恢复等,这些功能可以帮助用户快速备份和恢复虚拟机,以及在多个虚拟机之间轻松切换。此外,该软件还支持高级网络配置、USB设备直通、图形...
最新虚拟机VMware-Workstation-12.5.9官方中文免费版 已经内涵秘钥
Java虚拟机详解04----GC算法和种类【重要】,有助于更深入理解记忆,文字配图片,10分钟让你记住gc工作机制。
2. **安全性**: 在虚拟机中安装Linux的最大优势在于安全性。即使误操作,也只是影响虚拟机环境,不会对主机系统造成损害。要彻底删除虚拟机,需注意在VMware中执行相应的清理步骤,避免占用大量磁盘空间。 3. **所...
2. 虚拟机可以在一台机器上同时运行几个操作系统,是SOHO开发一族的必备工具。有了虚拟机,在家里只需要一台电脑,或出差时只带着一个笔记本,就可以调试C/S、B/S的程序了。 3. 利用虚拟机可以进行软件测试。 ...
win7的虚拟机安装linux--Redhat
2. **安全性与隔离**:虚拟机之间的隔离性确保了一个系统的故障不会影响其他系统,提高了数据的安全性。 3. **便捷的软件测试**:开发者可以利用虚拟机创建不同的测试环境,便于软件的兼容性和稳定性测试。 4. **...
NAT模式下,虚拟机的网络流量会通过主机的物理网络接口转发,从而实现虚拟机的网络访问。请注意,不要对这个虚拟网卡进行手动IP设置,以免引起不必要的网络配置问题。 在创建新的虚拟机时,网络设置是一个重要环节...
青龙未root小黄鸟虚拟机捉包软件-断网模块