/************************************************************************************************可以实现文件的传送功能,且可以选择存放的路径,若该路径有相同的文件名则询问*是否需要更改存储的文件名,如果需要则重新命名,否则退出。**2011-09-08*************************************************************************************************//***********************************************************************************************外加实现多线程,即多个客户端能同时传送文件给服务器**2011-09-19************************************************************************************************///服务器#include
#include#include#include#include#include#include#include#include#include#include#include#include#include#defineLISTENQ20#defineMAXLINE40#defineBUFFERSIZE4096#definePORT3336/*将buf中的字节内容写入文件描述符fd*/ssize_twriten(intfd,constvoid*vptr,size_tn){size_tnleft;ssize_tnwritten;constchar*ptr;ptr=vptr;nleft=n;while(nleft>0){//starttowriteif((nwritten=write(fd,ptr,nleft))<=0){if(nwritten<0&&errno==EINTR)//interupterrornwritten=0;elsereturn-1;}nleft-=nwritten;ptr+=nwritten;//continuetowritefromtheleft}returnn;}ssize_treadline(intfd,void*vptr,size_tmaxlen){ssize_tn,rc;charc,*ptr;ptr=vptr;for(n=1;nd_name)==0){printf("Alreadyhavethe%s\n",buff);printf("Ifyouwanttorename,pleaseinput'yes',oryoucaninput'no'\n");scanf("%s",choose);if(strcmp(choose,"yes")==0){printf("Youcanrename:\t");scanf("%s",buff);}else{printf("Alreadyhavethefile,nowexit!\n");exit(1);}}}filefd=open(buff,O_WRONLY|O_CREAT);if(filefd<0){fprintf(stderr,"can'topenthefile:%s\n",buff);exit(1);}printf("whichthreadis%d\n",connfd);while(count=read(connfd,buff,BUFFERSIZE)){if(...