windows c语言传输文件,C++_Windows网络编程之winsock实现文件传输示例,本文实例展示了Windows网络编程 - phpStudy...

Windows网络编程之winsock实现文件传输示例

本文实例展示了Windows网络编程中winsock实现文件传输的方法,对于进行Windows下的winsock网络编程有一定的借鉴参考价值。

该程序代码主要是基于TCP流协议的winsock网络文件传输示例,采用Windows下的C语言编写。可以实现传递任何格式文件的文件传输功能。

具体实现代码如下:

Server端代码如下:

/*************************************************************************

> File Name: Win_Server.c

> Author: SongLee

************************************************************************/

#include

#include

#include

#include

#define PORT 8087

#define SERVER_IP "127.0.0.1"

#define BUFFER_SIZE 1024

#define FILE_NAME_MAX_SIZE 512

#pragma comment(lib, "WS2_32")

int main()

{

// 声明并初始化一个服务端(本地)的地址结构

sockaddr_in server_addr;

server_addr.sin_family = AF_INET;

server_addr.sin_addr.S_un.S_addr = INADDR_ANY;

server_addr.sin_port = htons(PORT);

// 初始化socket dll

WSADATA wsaData;

WORD socketVersion = MAKEWORD(2, 0);

if(WSAStartup(socketVersion, &wsaData) != 0)

{

printf("Init socket dll error!");

exit(1);

}

// 创建socket

SOCKET m_Socket = socket(AF_INET, SOCK_STREAM, 0);

if (SOCKET_ERROR == m_Socket)

{

printf("Create Socket Error!");

exit(1);

}

//绑定socket和服务端(本地)地址

if (SOCKET_ERROR == bind(m_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)))

{

printf("Server Bind Failed: %d", WSAGetLastError());

exit(1);

}

//监听

if (SOCKET_ERROR == listen(m_Socket, 10))

{

printf("Server Listen Failed: %d", WSAGetLastError());

exit(1);

}

while(1)

{

printf("Listening To Client...\n");

sockaddr_in client_addr;

int client_addr_len = sizeof(client_addr);

SOCKET m_New_Socket = accept(m_Socket, (sockaddr *)&client_addr, &client_addr_len);

if (SOCKET_ERROR == m_New_Socket)

{

printf("Server Accept Failed: %d", WSAGetLastError());

break;

}

char buffer[BUFFER_SIZE];

memset(buffer, 0, BUFFER_SIZE);

if (recv(m_New_Socket, buffer, BUFFER_SIZE, 0) < 0)

{

printf("Server Receive Data Failed!");

break;

}

char file_name[FILE_NAME_MAX_SIZE+1];

memset(file_name, 0, FILE_NAME_MAX_SIZE+1);

strncpy(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE ? FILE_NAME_MAX_SIZE:strlen(buffer));

printf("%s\n", file_name);

FILE * fp = fopen(file_name, "rb"); //windows下是"rb",表示打开一个只读的二进制文件

if (NULL == fp)

{

printf("File: %s Not Found\n", file_name);

}

else

{

memset(buffer, 0, BUFFER_SIZE);

int length = 0;

while ((length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) > 0)

{

if (send(m_New_Socket, buffer, length, 0) < 0)

{

printf("Send File: %s Failed\n", file_name);

break;

}

memset(buffer, 0, BUFFER_SIZE);

}

fclose(fp);

printf("File: %s Transfer Successful!\n", file_name);

}

closesocket(m_New_Socket);

}

closesocket(m_Socket);

//释放winsock库

WSACleanup();

return 0;

}

Client端代码如下:

/*************************************************************************

> File Name: Win_Client.c

> Author: SongLee

************************************************************************/

#include

#include

#include

#include

#define PORT 8087

#define SERVER_IP "127.0.0.1"

#define BUFFER_SIZE 1024

#define FILE_NAME_MAX_SIZE 512

#pragma comment(lib, "WS2_32")

int main()

{

// 初始化socket dll

WSADATA wsaData;

WORD socketVersion = MAKEWORD(2, 0);

if(WSAStartup(socketVersion, &wsaData) != 0)

{

printf("Init socket dll error!");

exit(1);

}

//创建socket

SOCKET c_Socket = socket(AF_INET, SOCK_STREAM, 0);

if (SOCKET_ERROR == c_Socket)

{

printf("Create Socket Error!");

system("pause");

exit(1);

}

//指定服务端的地址

sockaddr_in server_addr;

server_addr.sin_family = AF_INET;

server_addr.sin_addr.S_un.S_addr = inet_addr(SERVER_IP);

server_addr.sin_port = htons(PORT);

if (SOCKET_ERROR == connect(c_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)))

{

printf("Can Not Connect To Server IP!\n");

system("pause");

exit(1);

}

//输入文件名

char file_name[FILE_NAME_MAX_SIZE+1];

memset(file_name, 0, FILE_NAME_MAX_SIZE+1);

printf("Please Input File Name On Server: ");

scanf("%s", &file_name);

char buffer[BUFFER_SIZE];

memset(buffer, 0, BUFFER_SIZE);

strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE ? BUFFER_SIZE:strlen(file_name));

//向服务器发送文件名

if(send(c_Socket, buffer, BUFFER_SIZE, 0) < 0)

{

printf("Send File Name Failed\n");

system("pause");

exit(1);

}

//打开文件,准备写入

FILE * fp = fopen(file_name, "wb"); //windows下是"wb",表示打开一个只写的二进制文件

if(NULL == fp)

{

printf("File: %s Can Not Open To Write\n", file_name);

system("pause");

exit(1);

}

else

{

memset(buffer, 0, BUFFER_SIZE);

int length = 0;

while ((length = recv(c_Socket, buffer, BUFFER_SIZE, 0)) > 0)

{

if (fwrite(buffer, sizeof(char), length, fp) < length)

{

printf("File: %s Write Failed\n", file_name);

break;

}

memset(buffer, 0, BUFFER_SIZE);

}

printf("Receive File: %s From Server Successful!\n", file_name);

}

fclose(fp);

closesocket(c_Socket);

//释放winsock库

WSACleanup();

system("pause");

return 0;

}

程序中备有较为详尽的注释,相信大家不难理解。感兴趣的朋友可以根据自身需要对程序加以灵活改善,使其功能更加强大。相关阅读:

快速查看win10 build版本号的最简单的方法

各种页面定时跳转(倒计时跳转)代码总结

win7计算机怎么更改工作组?

Android中使用Gson解析JSON数据的两种方法

Bootstrap每天必学之基础排版

Struts2实现CRUD(增 删 改 查)功能实例代码

JS截取字符串实例详解

Jquery 实现表格颜色交替变化鼠标移过颜色变化实例

c#.NET 写txt文件小例子

Win10输入法图标显示禁用必须重启电脑方可解决

理解Javascript闭包

轻松学习C#的结构和类

JavaScript使用shift方法移除素组第一个元素实例分析

详解WordPress中创建和添加过滤器的相关PHP函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

encrypt函数c语言,Crypt加密函数简介(C语言)

定义函数char * crypt (const char *key,const char * salt);函数说明crypt是个密码加密函数&#xff0c;它是基于Data Encryption Standard(DES)演算法。crypt只适用于密码的使用&#xff0c;不适合用于资料加密。crypt()将参数key所指的字符串加以加密&#xff0c;key字符串长…

串的块链存储c语言栈,小蚂蚁学习数据结构(18)——串的块链的代码实现

感觉上块链的代码实现比数组的代码实现要难一些&#xff0c;估计因为数组的实现书上有伪代码&#xff0c;而块链连伪代码都木有&#xff0c;不过归根到底还是水平不行……哭瞎……╥﹏╥.../*数据结构C语言版 串的块链存储表示和实现*/# include # include # include /* 链表元…

c语言sort函数排序二维数组,js 二维数组排序sort()函数

一、按数值排序var arr [[1, 2, 3], [7, 2, 3], [3, 2, 3]];arr.sort(function(x, y){return x[0] – y[0];});其实是数组依次将数组元素复制给x,y&#xff0c;比如首先将arr[0]赋给x&#xff0c;arr[1]赋给y&#xff0c;然后用x[0] – y[0]&#xff0c;根据返回的值&#xff…

c 语言 abs 库函数,absread,abswirte - C 语言库函数手册

absread, abswirte功 能: 绝对磁盘扇区读、写数据用 法: int absread(int drive, intnsects, int sectno, void *buffer);int abswrite(int drive, int nsects, in tsectno,void *buffer);程序例:/* absread example */#include #include #include #include int main(void){int…

每天一个linux命令博客nano,11 个鲜为人知的 Linux 命令(1)

英文&#xff1a;Tecmint&#xff0c;编译&#xff1a;Linux中国linux.cn/article-2258-1.html如有好文章Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务。Linux命令和它们的转换对于Linux用户、Shell脚本程序员和管理员来说…

谷歌发布最新版安卓Android,谷歌发布安卓 9 正式版,代号 Android Pie

爱搞机 8 月 7 日消息&#xff0c;据外媒报道&#xff0c;北京时间今日凌晨&#xff0c;谷歌开始向用户推送安卓 Android Pie 正式版&#xff0c;除了确定新系统的代号为 Pie(派)之外&#xff0c;谷歌还将原本的安卓 9.0 称作 Android 9 Pie&#xff0c;这与此前的官方命名有所…

c语言 1 %3c%3c -253,结构体嵌套 姓名前后怎么输出两次??

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/******************************************************************日期:2013-9-14*题目:结构体的嵌套*难度等级★★★*程序分析:*******************************************************************/#include void main() …

android 标题样式,Android定义各种样式的标题栏:requestWindowFeature()

最近在网上看到一篇介绍Android window的requestWindowFeature()的使用方法&#xff0c;共享出来大家学习学习requestWindowFeature(Window.FEATURE_LEFT_ICON);setContentView(R.layout.dialog_activity);getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, a…

m1笔记本android开发,Apple M1设备开发Android小tips

虽然m1来开发android是挺有优势的&#xff0c;苦于google目前还没有支持m1芯片的android studio版本(包括测试版) 截稿日期2021-5-14&#xff0c;所以我们当下可以选择idea2021&#xff0c;原生支持m1&#xff0c;而且编译速度运行效率更快(同时也会让你失去摸鱼时间)&#xff…

android天气预报实训程序清单,Android天气预报项目

1、项目效果图&#xff1a;2、主页面MainActivity代码如下&#xff1a;MainActivity.javapackage com.qianfeng.weather;import android.content.Intent;import android.graphics.drawable.AnimationDrawable;import android.os.Handler;import android.os.Message;import andr…

harmonyOS智慧屏,在鸿蒙HarmonyOS智慧屏上实现一款粗糙的计算器

在学习的路上我们不能只是停留在对理论知识的理解&#xff0c;还应该将理论和实战进行结合&#xff0c;这样才有利于我们能够更有深度的掌握知识&#xff0c;最终形成自己的知识体系结构。我们在实战的时候&#xff0c;不仅可以巩固我们的理论知识&#xff0c;还能够在实战中发…

imx6 android快速启动,android启动不起来(已解决)

我使用imx6dl,使用JB4.3.3-1.1.0版本&#xff0c;但在启动的时候最后停在了Freeing init memory: 232K&#xff0c;就没了动静&#xff0c;各位大侠帮忙分析一下吧&#xff1a;以下是log:U-Boot 2009.08 ( 1&#xfffd;&#xfffd;月 08 2014 - 15:47:46)CPU: Freescale i.MX…

android系统语音合成,android 语音合成报错

发现了2个问题第一个貌似是复制离线的资源出错了(已经核对过读写等权限)&#xff1a;12-19 19:54:49.739 32006-32159/com.zhanglf.youxuanz I/NonBlockSyntherizer: 初始化开始12-19 19:54:49.748 32006-32159/com.zhanglf.youxuanz W/System.err: java.io.FileNotFoundExcept…

华为公布4月升级鸿蒙,华为余承东:鸿蒙OS今年4月见,华为Mate X2首批升级

随着搭载鸿蒙OS的终端设备日益增多&#xff0c;鸿蒙系统何时应用于手机成为舆论关注的焦点。特别是在2020年12月华为发布鸿蒙OS 2.0手机开发者Beta版本之后&#xff0c;公众对手机上运行鸿蒙OS的期待值越来越高。余承东在发布会上表示&#xff0c;从今年4月开始&#xff0c;华为…

android酷狗缓存目录,酷狗缓存的歌曲在哪个文件夹_酷狗音乐缓存的歌曲在电脑哪个目录-win7之家...

酷狗是一款很流行的音乐播放软件&#xff0c;当我们在听歌曲的时候&#xff0c;默认会缓存到文件夹中&#xff0c;方便下次没有网络的时候可以继续听这首歌&#xff0c;有些用户想要知道酷狗缓存的歌曲在哪个文件夹&#xff0c;我们可以从主界面中进入即可找到&#xff0c;接下…

html内容点击按钮自动复制,HTML页面---复制按钮的使用(包含弹层)

先说一下我的整体方案&#xff1a;用到了clipboard插件&#xff0c;官方地址和github地址&#xff0c;也可以参考中文说明。clipboard插件实测&#xff1a;在PC端的浏览器(试了mac上的safari,chrome,firefox)可用&#xff0c;iOS 10.3上的safari可用&#xff0c;手机上的微信QQ…

html给文字添加阴影效果,如何设置样式之添加文字阴影、边框阴影或者添加自己的CSS...

以下的例子只是样式面板的使用案例之一&#xff0c;样式面板功能很强大&#xff0c;几乎能完成您的所有需求&#xff0c;详情参阅这里。边框的案例可以参阅这里。一、如何给文字添加阴影效果首先&#xff0c; 打开CSS工作面板请依次点击&#xff1a;右侧栏“样式面板”按钮(见第…

html5图片剪切板,JavaScript 网页端复制图片到剪切板

前端页面可能需要复制图片到剪切板的功能&#xff0c;这里使用JavaScript来实现这一功能&#xff0c;兼容大部分浏览器全部代码复制图片到剪切板复制图片var SelectText function (element) {var doc document;if (doc.body.createTextRange) {var range document.body.crea…

java中的html标签位置,Java 过滤所有html标签,复制文件到指定位置

public static String filterHtml(String string){String str string.replaceAll("", "").replaceAll("[a-zA-Z][1-9]?>", "");return str;}复制文件到指定位置public static boolean inPutStreamTofile(InputStream inStream, S…

湖北大学计算机科学与技术怎么样,湖北大学(专业学位)计算机技术考研难吗

考研真题资料优惠价原价选择很多考生在准备湖北大学(专业学位)计算机技术考研难吗&#xff1f;是考研报考的时候都会产生这样的疑问&#xff1a;这个专业的研究生好吗&#xff1f;适合我吗&#xff1f;对我以后的人生和职业会有帮助吗&#xff1f;考生在准备湖北大学(专业学位)…