one world,one dream

2008年奥运会主题口号“one world, one dream”于27号晚上发布,博主观看了发布会。

2008年奥运会的主题口号发布:one world,one dream               ->同一个世界,同一个梦想。

这是在27号晚上发布的,那天看了他的口号发布会。

请完成以下Linux实验 编写一个2个客户端程序,从服务器下载一个文件。一个是单进程(或线程),另一个是4个子进程(或线程),分别下载一个文件的不同分段。提交代码,记录它们下载速度的差异。服务器上的文件内容为"One Word One Dream”,共19个字符。客户端向服务器发送2个字节的内容,第一个字节为文件的偏移量,第2个字节为下载的长度。比如发送的是char 0={4.5),表明希望下载的片段是“World”.服务器模拟网络延迟,每隔1秒才能发送一个字节。它的代码如下: #include <stdio.h> #include <string.h> #include <netinet/in.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> #include <pthread.h> #define SERV_PORT 8888 #define Len 19 char *s="One World One Dream"; void mysend(int connfd,int start,int len){ int i; char *p=s+start; for(i=0;i<len;i++){ if(send(connfd,p+i,1,0)<1){ printf("send character %dth error\n",start+i+1); exit(1); } else printf("%dth character is sent.\n",start+i+1); sleep(1); } } void *do_work(void *arg) { int n, i; int connfd=(int)(long)arg; char buf[2];//buf[0]:start buf[1]:len pthread_detach(pthread_self()); n=recv(connfd,buf,2,MSG_DONTWAIT); if(n==-1){ if(errno==EAGAIN||errno==EWOULDBLOCK||errno==EINTR){ sleep(1); n=recv(connfd,buf,2,MSG_DONTWAIT); if(n>0) goto l1; } goto end; } else if(n==0){ printf("Client Socket closed.\n"); goto end; } l1: if(buf[0]<0||buf[0]>=Len||buf[1]<1||buf[0]+buf[1]-1>=Len){ printf("download parameters error\n"); goto end; } mysend(connfd,buf[0],buf[1]); end: close(connfd); } int main(void) { struct sockaddr_in servaddr; int listenfd, connfd,i=0; pthread_t tid; listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd==-1){ perror("listen socket create error"); exit(1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); int ret=bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); if(ret==-1){ perror("bind error"); exit(1); } ret=listen(listenfd, 200); if(ret==-1){ perror("listen function error"); exit(1); } printf("Accepting connections ...\n"); while (1) { connfd = accept(listenfd, NULL,NULL); if(connfd==-1){ perror("accept function error"); continue; } pthread_create(&tid, NULL, do_work, (void*)(long)connfd); } close(connfd); return 0; }
最新发布
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值