📄 myhost.c
字号:
/**MyHost.c*@run sheng*/#include "MyHost.h"void MyServer(int port,char filename[]){ struct sockaddr_in server_sockaddr,client_sockaddr; int sin_size,pic_num; char *fname=malloc(strlen(filename)+6); int sockfd,client_fd; if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket error"); exit(1); } printf("*****socket create seccess!*****\n"); server_sockaddr.sin_family=AF_INET; server_sockaddr.sin_port=htons(port); server_sockaddr.sin_addr.s_addr=INADDR_ANY; bzero(&(server_sockaddr.sin_zero),8); if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1) { perror("bind error"); exit(1); } printf("*****bind success!*****\n"); if(listen(sockfd,BACKLOG)==-1) { perror("liten error"); exit(1); } printf("*****Listening ......*****\n"); pic_num=0; while(1) { if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1) { perror("accept error"); exit(1); } if(fork()==0) { close(sockfd); printf("*****a client connect!*****\n"); sprintf(fname,"%d_%s",pic_num,filename); ser_pro(client_fd,fname); printf("*****a client disconnect!*****\n"); printf("======================\n"); printf("====%s *** seccess====\n",fname); printf("======================\n\n"); exit(0); } else close(client_fd); pic_num++; } close(sockfd); exit(0);}void MyClient(char hostname[],int hostport,char filename[]){ int sockfd; struct hostent *host; struct sockaddr_in serv_addr; if((host=gethostbyname(hostname))==NULL) { perror("gethostbyname error!\n"); exit(1); } if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket create error!\n"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(hostport); serv_addr.sin_addr=*((struct in_addr *)host->h_addr); bzero(&(serv_addr.sin_zero),8); if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1) { perror("connect error!\n"); exit(1); } printf("*****connect seccess!*****\n"); cli_pro(sockfd,filename);}void ser_pro(int sockfd,char filename[]){ char buf[MAXFILESIZE]; int m=0,n=0; int fd; if((fd=open(filename,O_RDWR|O_CREAT|O_TRUNC,S_IRWXU))==-1) { perror("open file error!\n"); return; } printf("*****begin receive data!*****\n"); while((n=recv(sockfd,buf,MAXFILESIZE,0))!=0) { m=writebuffer(fd,buf,n); if(m!=n) { perror("write file error!\n"); break; } } printf("****end receive data!****\n"); printf("*****receive data seccess!*****\n"); close(fd); close(sockfd);}void cli_pro(int sockfd,char filename[]){ char buf[MAXFILESIZE]; int m=0,n=0; int fd; if((fd=open(filename,O_RDONLY,S_IRWXU))==-1) { perror("file not exsist!\n"); exit(1); } printf("*****begin send data!*****\n"); while((n=readbuffer(fd,buf,MAXFILESIZE))!=0) { m=send(sockfd,buf,n,0); if(m!=n) { perror("send data error!\n"); break; } } printf("*****end send data!*****\n"); printf("*****send data seccess!*****\n"); close(fd); close(sockfd);}int readbuffer(int fd,char *buf,int len) { return read(fd,buf,len); }int writebuffer(int fd,char *buf,int len) { return write(fd,buf,len); }void convert(int width, int height, const unsigned char *src, unsigned char *dst, int push){ int line, col, linewidth; int y, u, v, yy, vr, ug, vg, ub; int r, g, b; const unsigned char *py, *pu, *pv; FILE *fp; if((fp = fopen ("output.ppm", "w+")) == NULL) { printf ("Could not open output.ppm file for writing.\n"); exit(1); } fprintf (fp, "P6\n%d %d\n255\n", width, height); linewidth = width >> 1; py = src; pu = py + (width * height); pv = pu + (width * height) / 4; y = *py++; yy = y << 8; u = *pu - 128; ug = 88 * u; ub = 454 * u; v = *pv - 128; vg = 183 * v; vr = 359 * v; for (line = 0; line < height; line++) { for (col = 0; col < width; col++) { r = (yy + vr) >> 8; g = (yy - ug - vg) >> 8; b = (yy + ub ) >> 8; if (r < 0) r = 0; if (r > 255) r = 255; if (g < 0) g = 0; if (g > 255) g = 255; if (b < 0) b = 0; if (b > 255) b = 255; switch(push) { case PUSH_RGB24: *dst++ = r; putc(r,fp); *dst++ = g; putc(g,fp); *dst++ = b; putc(b,fp); break; default: break; } y = *py++; yy = y << 8; if (col & 1) { pu++; pv++; u = *pu - 128; ug = 88 * u; ub = 454 * u; v = *pv - 128; vg = 183 * v; vr = 359 * v; } } /* ..for col */ if ((line & 1) == 0) { pu -= linewidth; pv -= linewidth; } } /* ..for line */ fclose(fp);}void rgb24(int width, int height, const void *src, void *dst){ convert(width, height, (const unsigned char *)src, (unsigned char *)dst, PUSH_RGB24);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -