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来获取文件打开的大小。
WINSOCK 传送文件的更多相关文章
- SZ,RZ传送文件
linux 和window之间通过xshell的命令 SZ,RZ传送文件:
- python使用简单http协议来传送文件
python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...
- Linux SSH 远程操作与传送文件
操作系统:centos 6.5 x64 一.远程连接:在进行linux 的 ssh远程操作前,一定要确认linux 是否安装了 openssh-clients,为了方便起见,一般用yum安装即可:# ...
- SCP传送文件时提示No ECDSA host key is known forx.x.x.x and you have requested strict checking.问题的解决办法
在使用SCP向其他设备传送文件时,打印如下错误: No ECDSA host key is known for x.x.x.x and you have requested strict checki ...
- Delphi IdTCPClient IdTCPServer 点对点传送文件
https://blog.csdn.net/luojianfeng/article/details/53959175 2016年12月31日 23:40:15 阅读数:2295 Delphi ...
- ESP8266传送文件设置和操作
问题:ESP8266不能被识别为USB盘,也不能通过串口传送文件,只能通过wifi传送文件,需要事前在串口连接后的repl状态下,用命令行方式配置网络参数,之后才可以用wifi传送文件(webrepl ...
- 【Linux】(2013-7-19)配置tftp与开发板传送文件
1. 安装必须软件 sudo apt-get install -y xinetd tftp-hpa 2. 修改配置文件 vi /etc/default/tftpd-hpa # /etc/default ...
- 利用python传送文件
转:微信公众号李云景(侵删) 很多人传送文件都是使用QQ,微信,百度云,或者其他网盘. 不过都有微信的传输文件有大小的限制,百度云就不说了,想要正常的下载速度反而要充VIP. 我一直推崇大家都学习Py ...
- 通过minicom传送文件的相关配置及使用方法
写一下我使用串口向开发板传送文件中遇到的问题及解决办法: 使用的软硬件环境: 虚拟机:VMware® Workstation 8.0.1 Linux操作系统:Fedora 9 开发板:mini6410 ...
随机推荐
- JS中的关键字和保留字
JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...
- [Spring Data Repositories]学习笔记--定义自己的repository
有时,我们会需要用到自己定义的一些查询方法,可以按照下面几步进行. 1. 定义一个包含该方法的接口 Interface UserRepositoryCustom { public void someC ...
- Codeforces 678E Another Sith Tournament 状压DP
题意: 有\(n(n \leq 18)\)个人打擂台赛,编号从\(1\)到\(n\),主角是\(1\)号. 一开始主角先选一个擂主,和一个打擂的人. 两个人之中胜的人留下来当擂主等主角决定下一个人打擂 ...
- POJ 1789 Truck History【最小生成树简单应用】
链接: http://poj.org/problem?id=1789 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- coursera 《现代操作系统》
什么是独占设备技术?为什么说 “SPOOLing不是独占设备的”? 百度百科没有解释,从教材中找到了: 第二章 取数指令 load To load a value from memory, you ...
- <2013 07 06> "极路由" 与 “家庭服务器” 报道两则
跟我做!打造家庭服务器 很久没有更新了,因为之前托朋友帮我弄的mini PC终于到手了.阴差阳错地,原来只打算弄一台将就可用的低功耗下载机,结果到手的却是一台支持1080p(宣称,还没烧过),还带遥控 ...
- JavaWeb 之文件上传
1. 文件上传的要求 1.1 上传对表单的限制 method="post"; enctype="multipart/form-data"; 表单中需要添加文件表 ...
- 使用远程管理工具Xshell
介绍 目前常用的远程管理工具 Xshell -- 免费版/收费版 SecureCRT Putty 安装Xshell 选择免费版即可 连接服务器 连接成功 Xshell连接不上排查流程 还有可能是Lin ...
- 关于主键(PRIMARY KEY)和自增(AUTO_INCREMENT)结合使用的知识点
1.主键(PRIMARY KEY)和自增(AUTO_INCREMENT)同时使用两种写法: a.主键(PRIMARY KEY)和自增(AUTO_INCREMENT)分两行写 创建一 ...
- Mybatis使用pageHelper步骤
1.在pom.xml中添加如下依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artif ...