#include #include #include #include #include #pragma comment(lib,"ws2_32.lib") #define RECV_PORT 20000 #define SENT_PORT 30000 #define MAX_FILESIZE 32*1024 SOCKET sock; sockaddr_in serveraddr; struct filedata{ char ffname[30]; char ffdata[MAX_FILESIZE]; int len; }datapacket; DWORD startsock() { WSADATA wsadata; if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0) { cout<<"start a sock failed!"< } else { cout<<"start a sock successed!"< serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1"); serveraddr.sin_port=htons(RECV_PORT); return 1; } } DWORD createsocket() { sock=socket(AF_INET,SOCK_STREAM,0); if(sock==SOCKET_ERROR) { cout<<"create socket error!"< } return 1; } void callserver() { createsocket(); while(connect(sock,(struct sockaddr *)&serveraddr,sizeof(serveraddr))==SOCKET_ERROR) { cout<<"error call"< cout<<"connect successed"< DWORD getfile(char * name) { int i=0; FILE * fp; int filesize=0; int count=0; int total=0; char buffer[100]={0}; char senddata[MAX_FILESIZE]={0}; fp=fopen(name,"r"); if(fp==NULL) { cout<<"cannot open the file!"< } while(!feof(fp)) { count=fread(buffer,sizeof(char),1,fp); if(ferror(fp)) { cout<<"read file error!"; break; } filesize++; if(filesize>MAX_FILESIZE) { cout<<"you file is too big to send!"< return -1; } memcpy(&senddata[i],buffer,count); i+=count; } fclose(fp); senddata[i]='\\0'; strcpy(datapacket.ffname,name); cout< datapacket.len=filesize-1; return 0; } DWORD sendpacket(struct filedata packet) { int length; length=send(sock,(char*)&packet,sizeof(datapacket),0); if(length<=0) { cout<<"send file data error!"< WSACleanup(); return -1; } cout<<"send is ok!"< } int main() { char echo[300]=" "; char echo1[300]="***********REPLY received(FROM Client)************"; char sendfilename[30]; startsock(); callserver(); while(1) { cout<<"input your filename to send : "< if(getfile(sendfilename)!=0) continue; sendpacket(datapacket); if(recv(sock,echo,sizeof(echo),0)<=0) break; cout< } closesocket(sock); return 0; }//客户端 //服务器端 #include"winsock2.h" #include #include #include #include #pragma comment(lib,"ws2_32.lib") #define RECV_PORT 2000 #define SENT_PORT 3000 #define MAX_FILESIZE 32*1024 SOCKET sock,sock1; sockaddr_in serveraddr; sockaddr_in clientaddr; struct filedata{ char ffname[30]; char ffdata[MAX_FILESIZE]; int len; }DataPacket; DWORD StartSock() { WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) { cout<<"start up a sock error,and the error number is:"< } else { cout<<"start up a sock!"< return 0; } DWORD CreateSocket() { sock=socket(AF_INET,SOCK_STREAM,0);//第一个表示域名,第二个表示数据流类型 if(sock==SOCKET_ERROR) { cout<<"sock create error with :"< return (-1); } else { cout<<"Socket create successed!"< serveraddr.sin_addr.s_addr=htonl(INADDR_ANY); serveraddr.sin_port=htons(RECV_PORT); //绑定 if(bind(sock,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in))==SOCKET_ERROR) { cout<<"bind error!"< } return 1; } } DWORD writefile(char * fname,char * fdata,int flen) { int i; FILE * fp; fp=fopen(fname,"w");//只写,存在将清0,不存在将创建 if(fp==NULL) { cout<<"cannot open the file"< } else { i=0; for(i=0;i fputc(fdata[i],fp); } fclose(fp); return 1; } } DWORD connectprocess() { int Addrlen=sizeof(sockaddr_in); if(listen(sock,5)<0) { cout<<" connect error!"< } else cout<<"listening..."< { sock1=accept(sock,(struct sockaddr FAR *)&clientaddr,&Addrlen); for(;;) { memset(DataPacket.ffname,0,30); memset(DataPacket.ffdata,0,MAX_FILESIZE); DataPacket.len=0; if(recv(sock,(char FAR*)&DataPacket,sizeof(DataPacket),0)<=0) break; cout<<"Has received file :"< cout< } } int main() { StartSock(); CreateSocket(); connectprocess(); }