前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >win32 tcp文件传输客户端

win32 tcp文件传输客户端

作者头像
流川疯
发布2019-01-18 14:25:08
1.3K0
发布2019-01-18 14:25:08
举报
文章被收录于专栏:流川疯编写程序的艺术
代码语言:javascript
复制
#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 1024

struct 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 name
	char package[BUFFERSIZE];//package data
	unsigned int length;//the byte of the file
	unsigned 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;
	
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年01月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档