网络程序设计TCP文件传输服务器

#pragma comment(lib,"ws2_32.lib")
#include
#include
#include

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 LocalAddr;
LocalAddr.sin_family=AF_INET;
LocalAddr.sin_port=htons(20000);
// LocalAddr.sin_addr.s_addr=htonl(INADDR_ANY);
LocalAddr.sin_addr.s_addr=inet_addr("127.0.0.1");

err=bind(sock,(sockaddr*)&LocalAddr,sizeof(LocalAddr));
if(SOCKET_ERROR==err)
{
printf("bind()Failed:%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}

err=listen(sock,5);
if(SOCKET_ERROR==err)
{
printf("listen()Failed:%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}


sockaddr_in ClientAddr;
int AddrLen=sizeof(ClientAddr);
while(1)
{
SOCKET sockConnected=accept(sock,(sockaddr*)&ClientAddr,&AddrLen);
if(INVALID_SOCKET==sockConnected)
{
printf("accept()Failed:%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}

char path[100]={"0"};
printf("文件路径:\n");
gets(path);
FILE* fp=fopen(path,"rb");

if(!fp)
{
printf("error!");
return 1;
}

else
{
printf("等待传输\n");
}

char rbuf[1024]={0};
while(!feof(fp))
{
memset(rbuf,0,1024);
fread(rbuf,1024,1,fp);
int sByte=send(sockConnected,rbuf,strlen(rbuf),0);
// int sByte = sendto(sock,rbuf,strlen(rbuf),0,(sockaddr*)&LocalAddr,sizeof(LocalAddr));
if(SOCKET_ERROR==sByte)
{
printf("send()Failed:%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}
}

fclose(fp);
}
closesocket(sock);
WSACleanup();
return 0;
}







}

相关文档
最新文档