客户端client.c

#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>//头文件
#include<string.h>
#include <sys/stat.h>
#pragma comment(lib,"Ws2_32.lib")//网络库#define PORT 8180
#define CON_IP "192.168.0.1"
// #define CON_IP "192.168.0.100"#define OPEN_FILE "C:\\Desktop\\test"
#define BUFFLEN 4096
int main()
{WORD wdversion = MAKEWORD(2, 2);//关于内存 需要的版本  wdversion转换为二进制高字节装副版本号 低字节装主版本号WSADATA wdsockmsg;     //可以用指针 要申请堆空间 并且释放 在这里栈空间已经足够int nres = WSAStartup(wdversion, &wdsockmsg);//打开网络库if (nres != 0){switch (nres){case WSASYSNOTREADY:printf("restart computer");break;case WSAVERNOTSUPPORTED:printf("update socket library");break;case WSAEINPROGRESS:printf("restart");break;case WSAEPROCLIM:printf("close no need program");break;  //错误代码的解释}return 0;}if (HIBYTE(wdsockmsg.wVersion) != 2 || LOBYTE(wdsockmsg.wVersion) != 2)//校验版本{//版本不对WSACleanup();//清理关闭网络库return 0;}SOCKET socketclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //操作接口 调用协议通信 第三个参数可以为0默认参数值 此处默认为tcp//第一个参数ip地址类型 第二个套接字类型 第三个传输协议if (socketclient == INVALID_SOCKET){printf("socketclient error = %d !\n",WSAGetLastError);//连接失败出错了 找出错误码进行改正WSACleanup();   //清理网络库system("pause");return 0;}struct sockaddr_in client;client.sin_family = AF_INET;//ipv4client.sin_port = htons(PORT);client.sin_addr.S_un.S_addr = inet_addr(CON_IP);int con = connect(socketclient, (const struct sockaddr*)&client, sizeof(client));printf("connect server = %d !\n",con);if (con == SOCKET_ERROR){printf("connecting server error = %d !\n",WSAGetLastError);//连接失败出错了 找出错误码进行改正closesocket(socketclient); //关闭网络连接(服务端)WSACleanup();//关闭网络库system("pause");return 0;}char recvbuf[BUFFLEN] = { 0 };int res = recv(socketclient, recvbuf, 1024, 0);//参数一指接受数据的来源socket,参数二指接受到的字符数组 最大长度一次一般为1500,参数三指需要接受的字符数组的长度,参数四设为0;if (res == 0){printf("connecting client outline!\n");}else if (res == SOCKET_ERROR){printf("SOCKET_ERROR = %d !\n",WSAGetLastError);//出错了 找出错误码进行改正system("pause");return 0;}else{printf("recv from server [%s] len[%d]\n", recvbuf, res);}struct stat file_stat;int ret = 0;int fd = -1;long int filesize=0;fd = open(OPEN_FILE, 0); // 只读打开文件ret = fstat(fd, &file_stat);if (ret == -1){printf("Get file %s stat failed!\n", OPEN_FILE);closesocket(socketclient); //关闭网络连接(服务端)WSACleanup();//关闭网络库return -1;}filesize=(long int)file_stat.st_size;printf("file size is %ld!\n", filesize);close(fd);FILE *fp = NULL;char sendbuf[BUFFLEN] = { 0 };fp = fopen(OPEN_FILE,"rb");if(fp == NULL){printf("file %s miss!\n", OPEN_FILE);closesocket(socketclient); //关闭网络连接(服务端)WSACleanup();//关闭网络库return 0;}long int sendbyte=0;long int nowsendbyte=0;while((sendbyte=fread(sendbuf, 1, BUFFLEN, fp)) != 0){nowsendbyte=ftell(fp);// printf("filesize=%ld,nowsendbyte=%d, progress=%.1f%% \n",filesize,nowsendbyte,((nowsendbyte*1.0)/(filesize*1.0)*100) );printf("%.1f%% \n",((nowsendbyte*1.0)/(filesize*1.0)*100) );// printf("sendbyte %ld \n",sendbyte );send(socketclient, sendbuf, sendbyte, 0);//sendbyte读到多少发多少memset(sendbuf,0,sizeof(sendbuf));}fclose(fp);closesocket(socketclient); //关闭网络连接(服务端)WSACleanup();//关闭网络库system("pause");return 0;
}

服务端server.c

#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <windows.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <unistd.h>//头文件#include<WinSock2.h>//头文件
#pragma comment(lib,"Ws2_32.lib")//网络库#define PORT 8180
#define LIN_IP "0.0.0.0"
#define OPEN_FILE "C:\\Desktop\\test"
#define BUFFLEN 4096int main()
{WORD wdversion = MAKEWORD(2, 2);//关于内存 需要的版本  wdversion转换为二进制高字节装副版本号 低字节装主版本号WSADATA wdsockmsg;     //可以用指针 要申请堆空间 并且释放 在这里栈空间已经足够int nres = WSAStartup(wdversion, &wdsockmsg);//打开网络库if (nres != 0){switch (nres){case WSASYSNOTREADY:printf("restart computer");break;case WSAVERNOTSUPPORTED:printf("update socket library");break;case WSAEINPROGRESS:printf("restart");break;case WSAEPROCLIM:printf("close no need program");break;  //错误代码的解释}return 0;}if (HIBYTE(wdsockmsg.wVersion) != 2 || LOBYTE(wdsockmsg.wVersion) != 2)//校验版本{//版本不对WSACleanup();//清理关闭网络库return 0;}SOCKET socketsever = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //操作接口 调用协议通信 第三个参数可以为0默认参数值 此处默认为tcp//第一个参数ip地址类型 第二个套接字类型 第三个传输协议if (socketsever == INVALID_SOCKET){int error = WSAGetLastError();  //错误码WSACleanup();   //清理网络库return 0;}struct sockaddr_in sever;sever.sin_family = AF_INET;//ipv4sever.sin_port = htons(PORT);sever.sin_addr.S_un.S_addr = inet_addr(LIN_IP);bind(socketsever, (const struct sockaddr*)&sever, sizeof(sever));//服务器端要用 bind() 函数将套接字与特定的 IP 地址和端口绑定起来/*bind第一个参数是socket变量 第二个参数为结构体变量addr里面有端口号 ip地址 第三个变量为addr变量的大小*//*(返回值正确为0 错误返回错误码)*/listen(socketsever, SOMAXCONN);//开始监听if (listen(socketsever, SOMAXCONN) == SOCKET_ERROR){int error2 = WSAGetLastError();//获得错误码closesocket(socketsever); //关闭网络连接WSACleanup();//关闭网络库return 0;}while(1){printf("waiting for connect!\n");struct sockaddr_in client;//创建客户端信息 系统自动填写int len = sizeof(client);SOCKET socketclient = accept(socketsever, (struct sockaddr*)&client, &len); //返回一个socket 客户端的socket 不想知道客户端的socket时把第二个人参数置为NULLif (socketsever == INVALID_SOCKET)//invalid_socket 表示socket创建无效的返回值{printf("client connect error!\n");int error3 = WSAGetLastError();  //错误码closesocket(socketsever); //关闭网络连接WSACleanup();//关闭网络库return 0;}printf("client connect success!\n");char srvsendbuf[BUFFLEN]= {0};sprintf(srvsendbuf,"I am server! you are connecting!");int srvsendres = send(socketclient, srvsendbuf, strlen(srvsendbuf), 0);//创建发送函数 参数与接受类似 若无错误返回发送的总字节数if (srvsendres == SOCKET_ERROR){int error5 = WSAGetLastError();printf("error code=%d.\n",error5);return 0;}FILE *fp = NULL;fp=fopen(OPEN_FILE,"wb+");if(fp == NULL){printf("file %s error!\n", OPEN_FILE);closesocket(socketclient); //关闭网络连接(服务端)closesocket(socketsever); //关闭网络连接(服务端)WSACleanup();//关闭网络库return 0;}char srvrecvbuf[BUFFLEN] = { 0 };int recvbyte = 0;while((recvbyte = recv(socketclient, srvrecvbuf, BUFFLEN, 0)) > 0 ){// printf("recvbyte:%d\n", recvbyte);fwrite(&srvrecvbuf, 1, recvbyte, fp);//是以二进位方式写入文件,recvbyte收到多少写多少// fwrite(数据,数据类型大小(字节数),写入数据的最大数量,文件指针);memset(srvrecvbuf,0,sizeof(srvrecvbuf));}printf("file size %ld \n",ftell(fp) );fclose(fp);closesocket(socketclient);//关闭网络连接(客户端)}closesocket(socketsever); //关闭网络连接(服务端)WSACleanup();//关闭网络库system("pause");}

windows下C语言学习--在两台电脑之间传文件相关推荐

  1. 详细教你两台电脑之间传文件

    当我们遇到两台电脑之间需相互要拷贝整个硬盘里的文件的时候,,我们又找不到这么大的移动存储设备,这时,两台电脑怎么传文件呢?也许有人一脸茫然.但是现在需要迷茫,小编这就向大家分享关于两台电脑怎么传文件的 ...

  2. winscp下载很慢_winscp使用教程 两台电脑间传文件,winscp使用教程 两台电脑间传文件,软件介绍...

    ftp是一种文件传输协议,可以实现在两台或者多台电脑之间传文件,在选择一款ftp软件的时候,应该看中的是安全性和传输速度,有时候的传输的文件是比较重要的,传输速度也很有必要,毕竟是传文件没有的文件太大 ...

  3. 数据传输/文件传输:两台电脑怎么传文件?

    两台电脑怎么传文件?电脑之间传输文件是很常见的一件事,但是你知道吗?传输文件是有小窍门的哦,今天小编就给大家介绍几种两台电脑怎么传文件的方法,大家可以根据自己的情况选择使用. 方法一:通过外接存储设备 ...

  4. 在计算机之间怎样进行软件传送,什么软件可以实现两台电脑之间的文件互传呢...

    满意答案 yewan969 推荐于 2018.07.27 采纳率:57%    等级:9 已帮助:2362人 1.简单易行,借助QQ等通讯工具.在两台电脑上分别登陆两个不同的QQ,直接把文件拖动到聊天 ...

  5. Windows10 下同一局域网两台电脑互传文件及其取消

    Windows10 下同一局域网两台电脑互传文件及其取消 文章目录 Windows10 下同一局域网两台电脑互传文件及其取消 2.第一台电脑设置共享文件夹 3.其他电脑登陆共享文件夹 4.取消共享 首 ...

  6. 两台电脑互传文件你还可以这么做

    两台电脑文件传输 你还可以这么做 前提 运行环境 操作步骤 前提 有时候你想在两台电脑之间传输下文件,身边又没有U盘,那怎么办呢?其实没那么麻烦,windows早就给你提供了无线传输的方法. 运行环境 ...

  7. 两台电脑usb直连 linux,两台电脑怎么传文件没有网线(两台电脑usb直连)

    对于两台电脑的数据传输而言,当下可通过各类社交(QQ,陌陌.微信.....).传输(飞鸽传书.360快传......)软件都可以实现 但由于各类软件需要下载安装以及相关软件学习使用成本,迫使很多用户都 ...

  8. 两台电脑之间传输文件——就近共享

    文章目录 背景 步骤 补充:跨设备共享 背景 两台电脑之间共享文件有很多种方式,这里介绍一种最简洁的--Windows自带的就近共享.它适合偶尔传输一些简单文件.比如把笔记本上的电子书传输到surfa ...

  9. 《Java两台电脑之间传输文件》

    开发工具与关键技术:IDEA  Java 撰写时间:2021/8/10   讲解一下两台电脑之间通过java代码传输视频文件(在有网络的情况下),我通过TCP协议来完成操作 ,TCP协议要明确哪一台电 ...

最新文章

  1. 十三、Redis五大数据类型之五Zset
  2. 数据绑定控件导出到excel
  3. Trie树的常见应用大总结(面试+附代码实现)
  4. PYTHON_正则表达式
  5. 使用eclipse调试hive mapreduce
  6. 问题三十二:怎么用ray tracing画多边形(polygon, triangle)
  7. 软件质量需要静态代码分析和动态测试
  8. java真香表情包_真香表情包 - 真香微信表情包 - 真香QQ表情包 - 发表情 fabiaoqing.com...
  9. 遗传算法适应度函数的计算原理
  10. P3376 【模板】网络最大流【EK算法+Dinic算法解】
  11. MTK6577 Android源代码目录
  12. 必应(Bing)的站内搜索 site:<域名> <搜索内容>
  13. Android 在build.gradle文件中读取json文件
  14. python 打印/输出元素,用 逗号/空格 分隔
  15. K2P没有无线信号LED灯不亮,居然成功修复
  16. 形式逻辑(普通逻辑)6:复合判断
  17. Unity ILRuntime Debugger使用及常见问题
  18. 华为起诉美国政府,曝其服务器曾被美国政府入侵
  19. Java集合 他人的总结 和 我的学习
  20. 3.身体各个部位英文表示

热门文章

  1. 线代[2]|对极易混淆概念的梳理—线性相关与线性无关、极大线性无关部分组与秩与基础解系、向量空间的基与维数
  2. LMS Virtual.Lab二次开发:声学仿真结果导出方法(VBScript、Python)
  3. Autocad的快捷键
  4. PHP植发,《嫁给中也给他植发》c语言黑板擦_【衍生小说|言情小说】_晋江文学城...
  5. 研发流程及各阶段任务
  6. 电磁分析matlab,瞬变电磁一维解析解MATLAB代码
  7. 计算机图形学基础学习笔记-其一:向量与线性代数
  8. Java 8 辣么大(lambda)表达式不慌之-----(一)Function
  9. python编程midi键盘按键错乱_键盘按键错乱怎么办?
  10. GJB6600-装备交互式电子技术手册