视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
文件传输代码
2025-09-25 21:28:10 责编:小OO
文档
#include

#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!"<return (-1); 

else 

cout<<"start a sock successed!"<serveraddr.sin_family=AF_INET; 

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; 

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!"<return -1; 

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!"<fclose(fp); 

return -1; 

memcpy(&senddata[i],buffer,count); 

i+=count; 

fclose(fp); 

senddata[i]='\\0'; 

strcpy(datapacket.ffname,name); 

cout<strcpy(datapacket.ffdata,senddata); 

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!"<closesocket(sock); 

WSACleanup(); 

return -1; 

cout<<"send is ok!"<return 1; 

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 : "<cin>>sendfilename;

if(getfile(sendfilename)!=0) 

continue; 

sendpacket(datapacket); 

if(recv(sock,echo,sizeof(echo),0)<=0)

break; 

cout<send(sock,echo1,sizeof(echo1),0); 

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:"<return (-1); 

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 :"<WSACleanup(); 

return (-1); 

else 

cout<<"Socket create successed!"<serveraddr.sin_family= AF_INET; 

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); 

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"<return (-1); 

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!"<return (-1); 

else 

cout<<"listening..."<for(;;) 

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 :"<writefile(DataPacket.ffname,DataPacket.ffdata,DataPacket.len); 

cout<

int main() 

StartSock(); 

CreateSocket(); 

connectprocess(); 

}下载本文

显示全文
专题