TCP文件传输实验.doc
文本预览下载声明
TCP文件传输
Client
#include stdafx.h
#pragma comment(lib,ws2_32.lib)
#include Winsock2.h
#includestdio.h
#include string.h
#includememory.h
#define MAX_BUF 65535
int main()
{WSAData wsaData;
int err=WSAStartup(WINSOCK_VERSION,wsaData);
if(0!=err)
{return -1;}
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET == sock)
{printf(socket() Failed:%d\n,WSAGetLastError());
WSACleanup();return -1;}
sockaddr_in ServerAddr;
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(20000);
ServerAddr.sin_addr.S_un.S_addr=inet_addr(172.17.194.8);
err = connect(sock,(sockaddr *)ServerAddr, sizeof(ServerAddr));
if(SOCKET_ERROR==err)
{printf(connect()Failed:%d\n,WSAGetLastError());
closesocket(sock);WSACleanup();return -1;}
char data[]={0};
printf(请输入文件名:(如D:\\1.txt)\n);
gets(data);
int sByte=send(sock,data,strlen(data),0);
if(SOCKET_ERROR==sByte)
{printf(send()Faild:%d\n,WSAGetLastError());
closesocket(sock);WSACleanup();return -1;}
shutdown(sock,SD_SEND);
char rbuff[MAX_BUF];
char path[20]={0};
printf(请输入写入文件路径:(如:D:\\2.txt)\n);
gets(path);
FILE *fp=fopen(path,wb);
if(!fp)
{printf(打开文件失败!);return 1;}
else{printf(文件已经打开,等待传输...\n);}
while(1)
{memset(rbuff,0,MAX_BUF);
int rByte=recv(sock,rbuff,MAX_BUF,0);
if(SOCKET_ERROR==rByte)
{printf(recv()Faild:%d\n,WSAGetLastError());
closesocket(sock);WSACleanup();return -1;}
if(0==rByte)
{printf(Connection is closed.\n);
break;}
fwrite(rbuff,1,MAX_BUF,fp);
printf(写入的文件内容为:\n %s\n,rbuff);}
fclose(fp);
closesocket(sock);
WSACleanup();
return 0;
}
server
#include stdafx.h
#pragma comment(lib,ws2_32.lib)
#include Winsock2.h
#includestdio.h
#include string.h
#includememory.h
#define MAX_BUF 65535
int _tmain(int argc, _TCHAR* argv[])
{WSAData wsaData;
int err=WSAStartup(WINSOCK_VERSION,wsaData);
if(0!=err){return -1;}
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET == sock)
{printf(socket() Failed:%d\n,WSAGetLastError());
WSACleanup();return -1;}
sockadd
显示全部