失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C/S架构的简单文件传输系统的实现

C/S架构的简单文件传输系统的实现

时间:2019-12-25 02:39:14

相关推荐

C/S架构的简单文件传输系统的实现

转载前注明出处欢迎转载分享实现代码github仓库地址:戳这里(/chensguo8099/network_programming/tree/master/Serv_sendfiles_to_Client)

课程要求:

相关函数:(一)C/S即客户端(client)与服务器(server),简单文件传输系统的实现运用了网络编程中socket套接字等相关知识,客户端与服务器建立连接用到了许多网络编程相关API函数: client:connect server:bind listen accept 参考相关内容:戳这里(/s/blog_12c2b05e90102x6rl.html)

(二)在客户端与服务器建立连接之后我们再使用文件相关知识对服务器端文件内容读出发送至TCP缓冲区,之后再由TCP缓冲区发送至客户端本地空文件中,即实现了服务器与客户端的文件传输功能。其中发送至TCP缓冲区和从TCP缓冲区取数据的过程用到了send,recv函数。 #include < sys/types.h> #include < sys/socket.h> ssize_t send(int sockfd, const void*buf, size_t len, int flags);int sockfd:accept函数返回的文件描述符const void* buf:为要发送的缓冲区地址size_t len:即为发送数据的大小 int flags:一般填0即可

#include < sys/types.h> #include < sys/socket.h> ssize_t recv(int sockfd, void* buf,size_t len, int flags);int sockfd:套接字文件描述符void* buf:为要发送的缓冲区地址size_t len:即为发送数据的大小int flags:一般填0即可

(三)实现该任务还用到了对文件的读写操作,我们应当将文件数据在服务器端读取出来并发送,然后在客户端创建一个空文件,再将客户端接收到的数据读入到该空文件中,用到了read和write函数。 #include < unistd.h > ssize_t read(int fd, void* buf, size_tcount);int fd:当打开一个文件时open函数所返回的文件描述符void* buf:即为从文件读数据至缓冲区size_t count:即为读取数据的大小

#include < unistd.h> ssize_t write(int fd, const void* buf,size_t count);int fd:当打开一个文件时open函数所返回的文件描述符void* buf:即为把缓冲区数据写至文件size_t count:即为读取数据的大小

遇到的问题:开始错误理解为服务器端向客户端发送文件名,之后客户端响应到该文件名并且将该文件发送至服务器端。其中客户端响应服务器发来的文件名时用了strcmp字符串比较函数来确认服务器所发送的文件名在客户端是否存在。理解正确后,在实现数据的发送接收时,起初用到的是c++中的流式输入输出文件(c语言的文件掌握不熟练),但在实现mp3数据传输时未能达到预期效果,然后学习了open,read,write这样的函数,并且去运用,完成了数据流的读出和写入。

代码展示:1.头文件:unp.h (head file)

2.服务器(server)c++ code (server)

3.客户端(client)c++ code (client)

运行截图: 1.启动服务器:

2.启动客户端,连接ip为127.0.0.1 连接端口为9500

3.服务器发送要发送的文件的名字

4.随即发送了服务器端的music.mp3文件

5.客户端响应服务器的发送,并且收到文件

6.客户端收到的文件为NEWmusic.mp3

7.该新文件的内容如图,与music.mp3一样

总结:本次设计使我了解socket套接字间通信的过程,并熟悉了文件数据的读出和写入。

如果觉得《C/S架构的简单文件传输系统的实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。