win32 tcp文件传输客户端

来源:互联网 发布:php 判断是否ajax请求 编辑:程序博客网 时间:2024/05/19 02:21
#include<stdio.h>#include <stdlib.h>#include <winsock2.h>#include <string.h>#pragma comment(lib,"ws2_32.lib")#define PORT 9999#define IPADDR "127.0.0.1"#define BACKLOG 20#define FILENAME 200#define LENGTH 200#define BUFFERSIZE 1024struct FILEHEAD //FILE-head  struct{char filename[LENGTH];//file name//char ext[LENGTH];unsigned int length;//the byte of the file};struct FILEDATA //FILE-data  struct{char filename[LENGTH];//file namechar package[BUFFERSIZE];//package dataunsigned int length;//the byte of the fileunsigned int index;//index of the package};void getFileInformation(FILEHEAD file){printf( "file information :\n" );printf( "  Filename: %s\n", file.filename );//printf( "  Ext: %s\n", file.ext );printf( "  length is btye: %ld btye\n", file.length );}int main(int argc, char *argv[]){FILEHEAD filehead;FILEDATA filedata;WSADATA wsadata;WSAStartup(MAKEWORD(2,0),&wsadata);SOCKET sock_trans=socket(AF_INET,SOCK_STREAM,0);memset(&filehead,0,sizeof(filehead));memset(&filedata,0,sizeof(filedata));if (0==sock_trans){printf ("socket build faile!!\n");exit(1);}printf ("target pc's IP address: 127.0.0.1\n");printf("输入文件名(包括路径):\n");scanf("%s",filehead.filename);//如果正式调试,将服务器端ip写死。SOCKADDR_IN sockadd;sockadd.sin_family=AF_INET;sockadd.sin_port=htons(PORT);sockadd.sin_addr.S_un.S_addr=inet_addr(IPADDR);int con_info=connect(sock_trans,(SOCKADDR*)&sockadd,sizeof(sockadd));if (SOCKET_ERROR==con_info){printf ("connect fail!\n");exit(1);}//Sleep(100);FILE *fp= NULL;fp=fopen(filehead.filename,"rb");if (NULL==fp){printf("cannot open the %s \n",filehead.filename);exit(1);}fseek(fp,0l,SEEK_END);//此处将fp移到了文件末尾,要移动回去,不然读文件总是零filehead.length=ftell(fp);fseek(fp,0l,SEEK_SET);//将文件指针移动回头部char ext[LENGTH]={0};_splitpath(filehead.filename, NULL, NULL, filehead.filename, ext);//分割文件名strcat(filehead.filename,ext);strcpy(filedata.filename,filehead.filename);getFileInformation(filehead);//setFileInformation();//freed_return_val=fread(buf,1,1024,fp);//读文件字符//char buf[BUFFER];int fread_return_val=0;//文件读出字符的返回值Sleep(3000);//发送文件头信息printf("发送文件头信息...\n");send(sock_trans,(char *)&filehead,sizeof(filehead),0);//char buf[BUFFERSIZE]={0};filedata.index=0;printf("发送文件信息...\n");while (1){fread_return_val=fread(filedata.package,1,BUFFERSIZE,fp);//fread_return_val=fread(buf,1,BUFFERSIZE,fp);if (0==fread_return_val){break;}filedata.index++;send(sock_trans,(char *)&filedata,sizeof(filedata),0);//send(sock_trans,buf,BUFFERSIZE,0);printf("第%d块发送完成!\n",filedata.index);}fclose(fp);closesocket(sock_trans);WSACleanup();printf("\n发送文件完成...\n");system("pause");return 0;}


 

原创粉丝点击