局域网内的文件传输工具

昨天花了点时间,写了个小程序,做了个局域网内的文件传输工具。当然了,关键在于学习,局域网内的文件用共享就好了,还有什么好传的。但里面用到的知识是可以用在INTERNET上的,只不过如果用在公网上的话一般还需要一个服务器的中转,多一步NAT穿透技术的支持。就是在做这个小程序的时候也出现过一些问题。先把关键部分代码贴出,再细细解释。

这是我用于传输文件信息的结构体,本来我将buf定义为CString类型,在传送阶段没有出现错误,很正常,但是在接收端却出现了异常,接收端接收到的buf显示的是乱码,至今不知道为什么。

这是发送端代码,因为要询问对方是否同意接收,所以要多了一个线程用于等待对方消息。如果没有多增加一个线程的话,等待将是痛苦的,而如果是在本机上进行测试的话,这样的等待更将是没有结果的,因为你根本没有表达的机会,就在那“死循环”。

这就是那个专门用于等待对方应答和发送文件正文的线程。做这个的过程中不得不提的就是通过int  WSAGetLastError (void);函数得到的发送错误报警10038,在CSDN当中,查到的10038提示的错误是:

WSAENOTSOCK
(10038)
Socket operation on nonsocket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

说的大概意思就是在一个无效的SOCKET上进行操作。我出现这个错误的原因并不是因为SOCKET关闭或者SOCKET的什么问题,而是因为当中的一个变量——用于表示文件路径名的FilePath定义得过小,这可能就导致了该说明所提到的第二个错误 for select, a member of an fd_set was not valid。

这是接收端的代码之一,我使用的是异步套接字进行接收,感觉挺方便的。当然,接收端跟发送端一样,也需要在建立一个线程,用于回答发送端的询问。如果没有多一个线程的话,等待也将是痛苦的。

这就是接收端新增加的线程。

 

当中还定义了几个自定义消息和静态成员变量。之所以定义静态成员变量是因为CreateThread函数的响应函数是一个静态成员函数,要在外部对工作在它内部的一个变量进行修改,方法之一就是定义一个静态成员变量。但是需要记住的一点就是静态成员变量的初始化必须在类的外部。

 

大概的程序就是如此,不足还有很多,希望路过者多提宝贵意见,共同学习,共同进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CSDN是一个技术社区,提供了许多与计算机科学和软件开发相关的资源。在局域网中,如果需要进行大文件传输,CSDN也可以提供相应的工具。 首先,对于局域网内的大文件传输,我们可以使用CSDN提供的FTP(文件传输协议)工具。FTP协议是一种在网络中进行文件传输的标准协议,它可以实现高效、快速地进行大文件的传输。CSDN提供的FTP工具可以帮助用户在局域网中建立一个FTP服务器,并进行文件的上传和下载操作。 其次,CSDN还提供了基于P2P(点对点)技术的大文件传输工具。P2P技术通过将文件分成若干个块,并将这些块分散存储在不同的终端设备上,实现了分布式的文件传输。CSDN的P2P大文件传输工具可以利用局域网内各个设备的存储空间,快速地进行大文件的传输,大大提高了传输速度和效率。 此外,CSDN还提供了一些云存储和文件分享服务,可以帮助用户方便地进行大文件传输。用户可以将大文件上传到CSDN提供的云存储空间中,然后通过生成的链接或分享码来共享给其他用户进行下载。这样的方式可以避免局域网传输的限制,方便快捷地进行大文件的传输。 综上所述,CSDN提供了多种局域网文件传输工具,包括FTP工具、P2P大文件传输工具以及云存储和文件分享服务等。用户可以根据具体需求选择合适的工具来实现快速、高效、安全的大文件传输
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值