c语言socket文件传输问题

c语言socket文件传输问题,第1张

服务器端(发送李卖文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充服务器的慧侍地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至此服务器阻塞,等待客户端的连接。

客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。

第二阶段,发送文件。

服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。

客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,哪碧逗即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。

打开指定程序没什么难度,困难的大概稿好就是打开内存中的文件了。

不过,你为什么一定要在内存中打开呢?Windows对内存管理的相当到位,正常情况下不会允拆橘许交叉覆盖访问的。

可以考虑在硬盘或者内存虚旅敬团拟盘等存储区将内存中的数据保存为文件,然后通过参数调用或者其他方法在指定程序中打开。

只纯雹亩能发送信息,对方收到信息然后把文件传送给你.

例如对方想要我的电脑里的某个文件,那他就发送那个文件的地址给我,我的程肆粗序收到做森这个信息后会激发Winsock1_DataArrival:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim S As String

Dim b(6400) As String

Winsock1.GetData S, vbString

Open S For Binary As #1

Do

Get #1, , b(6400)

Winsock1.SendData b(6400)

Loop Until EOF(1)

End Sub

关于Winsock控件如何连接那些应该会吧!

我只有一台电脑,上面的代码没试过.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12283686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存