WINSOCK 传送文件

SERVER:

// send_server.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")

int main(int argc,char** argv)
{
	WSADATA wsadata;
	if (WSAStartup(MAKEWORD(2,2),&wsadata) == -1)
	{
		printf("wsastartup error\r\n");
	}

	SOCKET server;
	server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if (server == SOCKET_ERROR)
	{
		printf("server socket start error\r\n");
		return 0;
	}

	sockaddr_in server_service;
	server_service.sin_family = AF_INET;
	server_service.sin_port = htons(8000);
	server_service.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	if (bind(server,(sockaddr*)&server_service,sizeof(server_service)) == SOCKET_ERROR)
	{
		printf("Bind Port error\r\n");
		return 0;
	}

	if (listen(server,5) == SOCKET_ERROR)
	{
		printf("Listen client error\r\n");
		return 0;
	}

	SOCKET acceptsocket;
	printf("wait accept recv data\r\n");
	while (1)
	{
		acceptsocket = SOCKET_ERROR;
		while (acceptsocket == SOCKET_ERROR)
		{
			acceptsocket = accept(server,NULL,NULL);

		}
		printf("Client connetcd\r\n");
		server = acceptsocket;
		break;
	}

	char sendbuf[1024] = {0};
	DWORD dwread;
	BOOL bret;
	char filename[] = "test.exe";
	HANDLE hfile = CreateFileA(filename,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
	while (true)
	{
		bret = ReadFile(hfile,sendbuf,1024,&dwread,NULL);
		if (bret == false)
		{
			printf("read file error\r\n");
			break;
		}
		else if (dwread == 0)
		{
			printf("send file ok");
			break;
		}else
		{
			send(server,sendbuf,dwread,0);
		}
	}
	CloseHandle(hfile);
	WSACleanup();
	return 0;
}

  

CLIENT:

// send_client.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")

int main()
{
	WSADATA wsadata;
	int iResult = WSAStartup(MAKEWORD(2,2),&wsadata);
	if (iResult != NO_ERROR)
	{
		printf("Errpr at wsastartup\r\n");
	}
	SOCKET client;
	client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if (client == INVALID_SOCKET)
	{
		printf("error at socket():%ld\r\n",WSAGetLastError());
		WSACleanup();
		return 0;
	}

	sockaddr_in clientService;
	clientService.sin_family = AF_INET;
	clientService.sin_port = htons(8000);
	clientService.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	if (connect(client,(SOCKADDR*)&clientService,sizeof(clientService)) == SOCKET_ERROR)
	{
		printf("Faied to error\r\n");
		WSACleanup();
		return 0;
	}

	char recvbuf[1024] = {0};
	int read;
	DWORD dwWrite;
	BOOL bRet;
	char filename[] = "test.exe";
	HANDLE hfile = CreateFileA(filename,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);

	while (true)
	{
		read = recv(client,recvbuf,1024,0);
		if (read ==-1)
		{
			break;
		}
		bRet = WriteFile(hfile,recvbuf,read,&dwWrite,NULL);

		if (bRet == FALSE)
		{
			MessageBoxW(NULL,_T("Write buffer error\r\n"),NULL,MB_OK);
		}
	}
	MessageBoxW(NULL,_T("write buffer susccess\r\n"),NULL,MB_OK);
	return 0;
}

在发送文件之前,我们可以利用getfilesize来获取文件打开的大小。

时间: 2024-08-06 23:21:19

WINSOCK 传送文件的相关文章

SSH Secure File Transfer Client传送文件

SSH Secure File Transfer Client是连接Linux的主要客户端工具之一,其特点就是传送文件方便.虽然SSH Secure File Transfer Client显示中文时有时会乱码,但仍然挡人们对它的喜爱 http://jingyan.baidu.com/article/19192ad815fd0ee53e570719.html

用Python多进程和paramiko给主机组批量分发命令和传送文件

需求: 1.用Python的多线程对主机组批量分发命令 2.需要有传送文件的功能 3.把输出的日志信息写到日志文件(包括正确输出日志,和错误输出日志,包含日志写入的时间) 准备工作: 1.把需要远程控制分发命令的机器(被控端)配置好ssh+key 2.下载第三方模块包 pycrypto-2.6.tar.gz   http://pan.baidu.com/s/1dFHSvcP paramiko-1.10.1.tar.gz http://pan.baidu.com/s/1hrWzg7y 在控制服务器

Linxu之间互相传送文件

Linxu之间互相传送文件:   scp命令: scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来.另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了.虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O

利用mstsc远程桌面传送文件,记录一下

尼玛之前服务器上传有点异常,在服务器装了一个上传下载监控的软件,用的是什么 绿色版QQ流量监控,绿色是挺绿色的,装了就等哭吧.没时间打字反正就是删除不了,后来想办法删除了.艹.所有服务除了系统服务能上网以外,其他任何服务都无法上网,包括 radmin!!!悲剧了.我服务器又没装 server-u,更别说拿浏览器去下载文件了.因为我删除了QQ流量监控以后,所有的lps都出问题,因为监控其实就是基于劫持所有的网络吧.不清楚原理但是明白大概. 尼玛要修复lps,最后找到360的lps修复工具.唉,总算

利用rz、sz命令在Windows主机和Linux主机之间传送文件

当我们在Windows上使用xshell连接Linux主机,需要向Linux主机传送文件或者从Linux主机上获取文件时,可以使用rz和sz命令来完成,rz和sz的好处在于简单方便只要在终端输入命令即可开启文件传输. rz:运行该命令,Linux主机接收文件,相对于Windows主机来说是向Linux主机传送文件. sz:运行该命令,Linux主机发送文件,相对于Windows主机来说是从Linux主机获取文件,sz命令后接要发送的文件. 当然,rz和sz在Linux上默认是没有安装的,这里我们

用网线在两台电脑间传送文件

材料:一根普通的网线(简单地说就是平时我们使用的连接笔记本和路由器的线,不是双绞线),两台WIN7系统的笔记本,就这些了. 步骤1:将两台电脑用网线连接起来. 步骤2:这时分别修改两台电脑上的数据.单击控制面板——查看网络状态和任务——查看活动网络——本地连接——属性——Internet 协议版本4,在弹出的对话窗中做如下修改: 第一台笔记本作如下修改:选择——使用下面的IP地址,IP地址192.168.1.1子网掩码255.255.255.0默认网关192.168.1.2——使用下面的DNS服

Python tcp socket 传送文件

[测试环境] os:Windows 10 x64 Python:3.6.3 [server.py] #encoding: utf-8 #author: walker #date:  2017-12-01  #summary: 用socket创建tcp server以接收文件  import os, time import socket import struct cur_dir_fullpath = os.path.dirname(os.path.abspath(__file__)) Host 

Delphi IdTCPClient IdTCPServer 点对点传送文件

https://blog.csdn.net/luojianfeng/article/details/53959175 2016年12月31日 23:40:15 阅读数:2295 Delphi     IdTCPClient 点对点传送文件 客户端向另一个客户端传送文件,不通过服务端中转那一个很重要的点是,这个客户端也要放一个IdTCPServer,也就是说这个客户端既是客户端,当接收文件的时候也是服务端,必须相应其它客户 端对它的连接,这个时候客户端相当与服务端,好了,明白这个道理就好办了 A客

两台电脑可以互相传送文件吗

我们在更换新电脑的时候,发现旧电脑上还有一些重要的资料或者电影照片,甚至是游戏,而且文件较大,甚至可达几十GB,单纯用U盘来挪动文件,是非常浪费时间的.今天小编就来教大家一下两台电脑如何相互连接传送文件. 首先要有一个无线路由器(交换机),2根网线.接下来我们假设:电脑A为旧电脑,电脑B为新电脑. 1.把电脑A的网线插在无线路由器的Lan1插口上,电脑B的网线插在Lan2插口上:如果都是笔记本或带无线网卡的电脑,也可以不使用网线,连接无线路由器的WiFi也行(建议网线下,网线比较稳定) 2.在电