一个绝佳的Windows和WSA传输文件的方法

前言

在Windows和Windows子系统安卓(WSA)之间传输文件,一直以来都是一个让人感到头疼的问题。虽然网络上有很多解决方案,但大多数方法要么过于繁琐,要么效果不尽如人意,常常需要依赖繁琐的步骤和额外的工具,效率一言难尽。

最近经常用Localsend,在我的电脑和两台安卓设备,对象的Iphone、Ipad、Windows之间传输文件,真的非常方便。今天突发奇想尝试将LocalSend用在Windows与WSA之间的文件传输,发现可行。那好了,这些传文件真的方便了。

本文将分享我在使用LocalSend进行Windows与WSA文件传输的安装教程和使用经验,希望能为同样面临此类问题的你提供一些有价值的参考。

安装步骤

准备

  1. WSA,安装WSA不是本文章重点,不详细介绍。
  2. Localsend,安装Windows版本和下载Android(apk)安装包

安装

链接Windows和WSA

打开WSA的开发者模式:
在这里插入图片描述
打开Adb工具(下载链接,可能需要魔法),输入:

adb connect 127.0.0.1:58526

在这里插入图片描述
如果提示积极拒绝,那就是虚拟机还没打开,点“管理开发人员设置”/“Manage Developer Settings”,出现以下界面,等待打开即可。
在这里插入图片描述
显示Connected to 127.0.0.1:58526即为成功连接到虚拟机。

安装LocalSend

  1. 复制apk的链接
    在这里插入图片描述
  2. 在命令行输入:
adb install %Localsend的apk文件绝对链接%

显示Successful Performing Install即为成功

在Windows和WSA上都打开Localsend,就可以进行文件传输啦!
在这里插入图片描述
在这里插入图片描述

如果有帮到你,请点个赞吧~有用的话也请收藏🌹
END
以下是一个简单的 Windows UDP 文件传输服务器和客户端的 C 代码示例: 服务器端代码: ```c #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #define BUFLEN 512 #define PORT 8888 void die(char *s) { perror(s); exit(1); } int main(void) { struct sockaddr_in si_me, si_other; int s, i, slen = sizeof(si_other), recv_len; char buf[BUFLEN]; FILE *fp; WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { die("WSAStartup failed"); } if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR) { die("socket"); } memset((char *)&si_me, 0, sizeof(si_me)); si_me.sin_family = AF_INET; si_me.sin_port = htons(PORT); si_me.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(s, (struct sockaddr *)&si_me, sizeof(si_me)) == SOCKET_ERROR) { die("bind"); } if ((fp = fopen("recv.txt", "wb")) == NULL) { die("fopen"); } while (1) { if ((recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *)&si_other, &slen)) == SOCKET_ERROR) { die("recvfrom"); } if (strcmp(buf, "END") == 0) { break; } fwrite(buf, sizeof(char), recv_len, fp); } fclose(fp); closesocket(s); WSACleanup(); return 0; } ``` 客户端代码: ```c #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #define BUFLEN 512 #define PORT 8888 void die(char *s) { perror(s); exit(1); } int main(void) { struct sockaddr_in si_other; int s, i, slen = sizeof(si_other), read_len; char buf[BUFLEN]; FILE *fp; WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { die("WSAStartup failed"); } if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR) { die("socket"); } memset((char *)&si_other, 0, sizeof(si_other)); si_other.sin_family = AF_INET; si_other.sin_port = htons(PORT); si_other.sin_addr.s_addr = inet_addr("127.0.0.1"); if ((fp = fopen("send.txt", "rb")) == NULL) { die("fopen"); } while ((read_len = fread(buf, sizeof(char), BUFLEN, fp)) > 0) { if (sendto(s, buf, read_len, 0, (struct sockaddr *)&si_other, slen) == SOCKET_ERROR) { die("sendto"); } } strcpy(buf, "END"); if (sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&si_other, slen) == SOCKET_ERROR) { die("sendto"); } fclose(fp); closesocket(s); WSACleanup(); return 0; } ``` 这个示例使用 UDP 协议进行文件传输,服务器端将接收到的数据写入到 recv.txt 文件中,客户端从 send.txt 文件中读取数据并发送给服务器端。注意,这个示例没有进行任何错误处理和数据校验,仅供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值