69,368
社区成员
发帖
与我相关
我的任务
分享
// server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include"Winsock.h"
#include"windows.h"
#include"stdio.h"
#include <direct.h>
#include <stdlib.h>
#include <io.h>
#pragma comment(lib,"wsock32.lib")
#define RECV_PORT 2000
#define SEND_PORT 3000
#define MAX_FILESIZE 32*1024
SOCKET sock,sockl;
sockaddr_in ServerAddr;
sockaddr_in ClientAddr;
struct Filedata
{
char ffname[30];
char ffdata[MAX_FILESIZE];
int len;}DataPacket;
int Addrlen;
DWORD StartSock()
{
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)
{
printf("sock初始化失败!\n");
return(-1);
}
return(1);}
DWORD CreateSocket()
{
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==SOCKET_ERROR)
{
printf("sock创建失败!\n");
WSACleanup();
return(-1);
}
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);
ServerAddr.sin_port=htons(RECV_PORT);
if(bind(sock,(struct sockaddr FAR*)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
{ printf("绑定出错");
return(-1);
}
return(1);}
DWORD WriteFile2(char*fname,char*fdata,int flen)
{
int i;
FILE *fp;
fp=fopen(fname,"wb");
if(fp==NULL)
{
printf("不能打开文件\n");}
i=0;
for(i=0;i<flen;i++)
{
fputc(fdata[i],fp);
}
fclose(fp);
return(1);
}
int SerchFile(char *to_search) //serch file function
{
long handle; //用于查找的句柄
struct _finddata_t fileinfo; //文件信息的结构体
handle=_findfirst(to_search,&fileinfo); //第一次查找
if(-1==handle)
return -1;
printf("%s\n",fileinfo.name); //打印出找到的文件的文件名
while(!_findnext(handle,&fileinfo)) //循环查找其他符合的文件,知道找不到其他的为止
{
printf("%s\n",fileinfo.name);
}
_findclose(handle); //别忘了关闭句柄
return 0;
}
DWORD ConnectProcess()
{ //char fname[300];
Addrlen=sizeof(sockaddr_in);
if(listen(sock,5)<0)
{ printf("监听出错");
return(-1);
}
printf("监听...\n");
for(;;)
{
sockl=accept(sock,(struct sockaddr FAR*)&ClientAddr,&Addrlen);
for(;;)
{ memset(DataPacket.ffname,0,30);
memset(DataPacket.ffdata,0,MAX_FILESIZE);
DataPacket.len=0;
if(recv(sockl,(char*)&DataPacket,sizeof(DataPacket),0)<=0)
{
break;
}
printf("已经接收到文件:%s\n",DataPacket.ffname);
printf("文件大小:%d\n",DataPacket.len);
WriteFile2(DataPacket.ffname,DataPacket.ffdata,DataPacket.len);
printf("\n");
}
}
}
int main()
{ if(StartSock()==-1)
return(-1);
if(CreateSocket()==-1)
return(-1);
//先检索服务器发来的文件目录,然后检索目录列出所有的文件返回给客户端,然后再次接受客户端发来的文件名,再将此文件发给客户端。
/*if(ConnectProcess()==-1)
return(-1);
*/
return(1);}
// client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"Winsock.h"
#include"windows.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#pragma comment(lib,"wsock32.lib")
#define RECV_PORT 1024//接受数据端口
#define SEND_PORT 1025//发送数据端口
#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)
{ printf("sock初始化失败!\n");
return(-1);}
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)
{ printf("sock创建失败!\n");
WSACleanup();
return(-1);}
return(1);}
void CallServer()
{ CreateSocket();
while(connect(sock,(struct sockaddr*)&ServerAddr,
sizeof(ServerAddr))==SOCKET_ERROR)
{printf("连接...\n");}}
DWORD GetFile(char*fname)
{
FILE*fp;
int Filesize;
int i;
int count,total=0;
char buffer[100];
char Senddata[MAX_FILESIZE];
fp=fopen(fname,"rb");
if(fp==NULL)
{
printf("不能打开文件\n");
return(0);
}
i=0;
Filesize=0;
memset(Senddata,0,MAX_FILESIZE);
while(!feof(fp)) {
count=fread(buffer,sizeof(char),100,fp);/
if(ferror(fp))
{
printf("读文件出错");
break;
}
Filesize+=count;
if(Filesize>MAX_FILESIZE)
{
printf("文件太大\n");
fclose(fp);
return(0);
}
memcpy(&Senddata[i],buffer,count);
}
fclose(fp);
Senddata[i]='\0';
strcpy(DataPacket.ffname,fname);
memcpy(DataPacket.ffdata,Senddata,Filesize);
i+=count;
DataPacket.len=Filesize;
printf("%s\n",DataPacket.ffname);
printf("%d\n",DataPacket.len);
return(1);
}
DWORD TCPSendPacket(struct Filedata Packet)
{
int length;
length=send(sock,(char*)&Packet,sizeof(DataPacket),0);
if(length<=0)
{ printf("发送数据失败!\n");
closesocket(sock);
WSACleanup();
return(-1);
}
return(1);
}
int main()
{ char sendfilename[30];
StartSock();
CallServer();
printf("连接成功!\n");
//求代码 功能 输入服务器机器中某个文件夹目录 列出其中所有的文件返回给客户机 然后客户机在此输入文件名发给服务端,然后按后服务器端将文件发过来,保存在客户端本地。
closesocket(sock);
return(0);
}