900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > c语言socket发送excel socket文件传输功能的实现

c语言socket发送excel socket文件传输功能的实现

时间:2024-03-25 03:58:23

相关推荐

c语言socket发送excel socket文件传输功能的实现

服务端:

#include

#include

#pragmacomment(lib,"ws2_32.lib")//加载ws2_32.dll

#defineBUF_SIZE1024

intmain(intargc,char*argv[]){

//先检查文件是否存在

char*filename="Beyond.mp3";//文件名

FILE*fp=fopen(filename,"rb");//以二进制方式打开文件

if(fp==NULL)

{

printf("Cannotopenfile,pressanykeytoexit!\n");

system("pause");

exit(0);

}

//初始化DLL

WSADATAwsaData;

WSAStartup(MAKEWORD(2,2),&wsaData);

//创建套接字

SOCKETservSock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

if(servSock==INVALID_SOCKET)

{

printf("Failedsocket().\n");

WSACleanup();

return0;

}

//绑定套接字

structsockaddr_insockAddr;

memset(&sockAddr,0,sizeof(sockAddr));//每个字节都用0填充

sockAddr.sin_family=PF_INET;//使用IPv4地址

sockAddr.sin_addr.s_addr=inet_addr("127.0.0.1");//具体的IP地址

sockAddr.sin_port=htons(1234);//端口

if(bind(servSock,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR))==SOCKET_ERROR)

{

printf("Failedbind().\n");

WSACleanup();

return0;

}

//进入监听状态

listen(servSock,20);

//循环接收客户端请求

intnSize=sizeof(SOCKADDR);

charbuffer[BUF_SIZE]={0};//缓冲区

SOCKADDRclntAddr;

SOCKETclntSock;

for(;;)

{

clntSock=accept(servSock,(SOCKADDR*)&clntAddr,&nSize);

if(clntSock==INVALID_SOCKET)

{

printf("Failedaccept().\n");

continue;

}

intnCount;

while(nCount=fread(buffer,1,BUF_SIZE,fp)>0)

{

send(clntSock,buffer,nCount,0);//循环发送数据,直到文件结尾

}

shutdown(clntSock,SD_SEND);//文件读取完毕,断开输出流,向客户端发送FIN包

recv(clntSock,buffer,BUF_SIZE,0);//阻塞,等待客户端接收完毕

memset(buffer,0,BUF_SIZE);//设置缓冲区

fclose(fp);

closesocket(clntSock);

}

//关闭套接字

closesocket(servSock);

//终止DLL的使用

WSACleanup();

system("pause");

return0;

}

客户端:

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

#defineBUF_SIZE1024

intmain(intargc,char*agrv[])

{

//先输入文件名,看文件是否能创建成功

charfilename[100]={0};//文件名

printf("Inputfilenametosave:");

gets(filename);

FILE*fp=fopen(filename,"wb");//以二进制方式打开(创建)文件

if(fp==NULL)

{

printf("Cannotopenfile,pressanykeytoexit!\n");

system("pause");

exit(0);

}

//初始化DLL

WSADATAwsaData;

WSAStartup(MAKEWORD(2,2),&wsaData);

//创建套接字

SOCKETsock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

if(sock==INVALID_SOCKET)

{

printf("Failedsocket().\n");

WSACleanup();

return0;

}

//向服务器发起请求

structsockaddr_insockAddr;

memset(&sockAddr,0,sizeof(sockAddr));//每个字节都用0填充

sockAddr.sin_family=PF_INET;

sockAddr.sin_addr.s_addr=inet_addr("127.0.0.1");

sockAddr.sin_port=htons(1234);

if(connect(sock,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR))==-1)

{

printf("Failedconnect().\n");

WSACleanup();

return0;

}

//循环接受数据,知道文件传输完毕

charbuffer[BUF_SIZE]={0};//文件缓冲区

intnCount;

while((nCount=recv(sock,buffer,BUF_SIZE,0))>0)

{

fwrite(buffer,nCount,1,fp);

}

puts("Filetransfersuccess!\n");

memset(buffer,0,BUF_SIZE);//重置缓冲区

fclose(fp);

closesocket(sock);

//终止使用DLL

WSACleanup();

system("pause");

return0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。