免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2143 | 回复: 5
打印 上一主题 下一主题

[网络] socket 循环发送数据,模拟出码率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-19 14:56 |只看该作者 |倒序浏览
RT,怎么使  服务端  循环发数据 ,而且还按照一定的周期呢? 请各位大牛 多多指教。

论坛徽章:
0
2 [报告]
发表于 2012-07-19 15:00 |只看该作者
比如,怎么实现 ,用socke  发送  800Kbps  ?

论坛徽章:
0
3 [报告]
发表于 2012-07-19 16:01 |只看该作者
本帖最后由 liuchang8877 于 2012-07-19 17:01 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<errno.h>
  5. #include<sys/types.h>
  6. #include<sys/socket.h>
  7. #include<netinet/in.h>


  8. #define MAXLINE 4096

  9. int main(int argc,char **argv)
  10. {
  11.     int listenfd, connfd;
  12.     struct sockaddr_in servaddr,cliaddr;
  13.     char buff[MAXLINE];
  14.     int n;

  15.     if((listenfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
  16.         printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
  17.         exit(0);
  18.     }

  19.     memset(&servaddr,0,sizeof(servaddr));
  20.     servaddr.sin_family = AF_INET;
  21.     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  22.     servaddr.sin_port = htons(20000);


  23.     if( bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1){
  24.         printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
  25.         exit(0);
  26.     }

  27.     if(listen(listenfd,10) == -1){
  28.         printf("listen socket error:%s(errno:%d)\n",strerror(errno),errno);
  29.         exit(0);
  30.     }


  31.     socklen_t length = sizeof(cliaddr);
  32.     printf("======waiting for client's request ======= \n");
  33.     while(1){
  34.         if( (connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&length)) == -1 ){

  35.             printf("accept socket error:%s(errno: %d)",strerror(errno),errno);
  36.             continue;
  37.         }

  38.         /* show the child */
  39.         printf("from client ,IP:%s,PORT:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
  40.         memset(&buff,'1',MAXLINE);

  41.        /*send data*/
  42.         int size_sockaddr = sizeof(struct sockaddr_in);

  43.         int i;
  44.         while(1){  //此处达到了循环写入的效果,但是怎可控制写入的速度? 用sleep()/??
  45.                for( i = 0; i < 100; i++)
  46.                      sendto(connfd,buff,MAXLINE,0,(struct sockaddr*)&servaddr,size_sockaddr);
  47.         }
  48. //      close(connfd);
  49.     /*
  50.     n = recv(connfd,buff,MAXLINE,0);
  51.     buff[n] = '\0';
  52.     printf("recv msg from client: %s\n",buff);
  53.     close(connfd);*/
  54.    }
  55.    close(connfd);
  56.    close(listenfd);
  57. }
  58.      


复制代码
//这是服务端 发送 程序,怎么控制它的发送速率?

论坛徽章:
0
4 [报告]
发表于 2012-07-19 17:41 |只看该作者
现在出现的是楼上的代码。为什么会自己退出???  奇怪了

论坛徽章:
0
5 [报告]
发表于 2012-07-20 09:29 |只看该作者
的确和楼上相同,测试出来了,sleep (1), #define MAXLINE 256   时 是112Kbps ,    #define MAXLINE 512   时 是384Kbps ,    #define MAXLINE 1024   时 是800Kbps ,  #define MAXLINE 2048  时 是1600Kbps .。。  有错误的地发 望高手指正,   觉得这个应该跟Pc 有关,不同的pc 速度不同,是不也会不同?
???   

论坛徽章:
0
6 [报告]
发表于 2012-07-20 09:55 |只看该作者
为啥都不顶我的帖子。。。。。。。。。。新手 默默伤心蹲在墙角
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP