以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 网友互助 』  (http://bbs.xml.org.cn/list.asp?boardid=76)
----  请教~写一个文件共享的程序(file sharing application)的相关知识  (http://bbs.xml.org.cn/dispbbs.asp?boardid=76&rootid=&id=59989)


--  作者:shinjisouji
--  发布时间:3/14/2008 10:54:00 PM

--  请教~写一个文件共享的程序(file sharing application)的相关知识

请教一下如何用数据与网络传输的相关知识写一个文件共享的程序(file sharing application)。

基本要求是:
1 一个用户A把一些文件放到一个特定的目录(directory)下;
2 这个目录下的所有文件都是A的朋友们都可以共享。
3 用户A会设一个密码来保证只有他的朋友才可以下载这一特定目录下的文件。
4 如果A的一个朋友B知道A的IP地址,接入这一文件传输程序的端口(port number),和密码,B就可以浏览这个目录下所有的文件名和文件长度,并且选择他想要的文件下载到自己的电脑上。

这个程序必须用到socket programming(很抱歉我还不知道中文怎么说),并且只能用C语言编写。

我现在的主要问题是:我还是个C语言新手,连文件处理都不是很熟悉;socket programming做过一些练习,只知道UDP和TCP,会用TCP编写很简单的客户端和服务器端一替一次轮流“聊天”的程序(也就是将用户输入的数字或字符串发送到另一台电脑的程序),但是这个文件共享的编程仍然不知如何下手。

问题1. 我想分别写TCP的客户端和服务器端的程序,客户端先后调用socket(), connect(), 服务器端调用socket(), bind(), listen(), accept(); 之后服务器在accept成功之后向客户端发送一个“请输入密码”这样的请求,然后客户端将用户输入的密码发给服务器端。假设用户3次输入密码不正确,客户端将关闭连接(就是调用closesocket())。请问是这样的思路吗?因为我只会这一种编程的方法……

2 是否应在客户端写一个for或者while循环,循环3次都接到服务器端“密码不正确”的信息之后跳出,接着关闭连接?而服务器端检查密码是否只需一个简单的if判断?我想知道通过密码接入共享的目录这个操作是否有特定的函数,算法……来实现,而并不是想我想的这么简单。

3 我不知道如何让A的朋友B浏览A的共享目录下的文件名和文件长度。我完全不知道怎么用C写一个找到某个磁盘,并显示某个目录(比如D:/My Homework/Math Homework)下所有文件的文件名和文件长的程序。我只知道用Windows的“命令提示符”里显示某个目录下所有文件的命令行是dir。另外,我现在对文件的理解仍然只是文本文档(.txt),如果这个文件是.mp3怎么办?我完全不知道怎么把一个存在磁盘里文件发送出去……文件这个方面有很多概念不清,请大家可不可以告诉我这涉及哪方面的知识,我去找书看。指点一下应该怎么补这些知识更好^^

4 当B下载完文件想要退出时,是否应发给A一个信号,接收A的回应后关掉自己这边的连接(调用closesocket());A这边在向B发出“收到”的信号之后关掉自己这边的连接?

5 我不明白如何让两边都成功退出这个文件共享程序。是否理论上服务器端(A这边)应该保持这个程序永远运行,随时等待客户端(比如B)发送请求;而B端应该有一个安全退出这个程序的方法?我不知道怎么编写让B端“退出”的程序。

6 暂时就这么多问题。因为还没有开始写程序,所以还想不到会面临什么问题。如果有编过类似程序的达人还请不吝赐教,告诉我一些经验,非常感谢!!

我知道问这么大的问题很欠抽…总之,不论如何,还是请大家帮帮忙,稍微指点一两处都好。我邮箱shijisouji@gmail.com, 在线等,非常感谢!!


另外,是在Visual Basic C++中写的程序,用VB命令提示符编译(这个编译器用得也是很糊涂,很多命令行不熟悉……)。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms