日期:2014-05-16  浏览次数:20688 次

请教局域网传输软件编写的一些指导性意见
这是毕业设计的题目,做个类似飞鸽传书那样的。

也是刚看完Linux程序设计,昨天实现了个命令行的版本,只是练手,用的是TCP协议传输的,发现个奇怪的问题,在本机测试下载了个本地文件(程序),下载之后大小跟原来的不一样,但是竟然能执行。。很诡异,有人能解答下么。。

下面是想要问的一些问题,寻求一些指导性意见:

1.既然是局域网,那应该可以搜索192.168.1.1 - 192.168.225.225这些地址的共享文件,那么当一个人上线之后,如何通知其他在线用户,我上线了。

2.通信协议应该选什么样的好,理由。

3.为了能同时和多个人传送接收文件(像迅雷多个任务同时下载),应该用多线程编程,还是socket里面那个select,再或者是多进程(感觉多进程有点奇怪)?

4.关于socket的NOBLOCK这些,需要用么,还是注意什么。

5.不太重要的界面问题,现在看了GTK了,感觉就是函数名好长,Qt还没看,不过貌似像MFC那样(虽然也没写过MFC的程序)。

谢谢各位!





------解决方案--------------------
可以参考以下iptux的代码!
这个我一直在用
------解决方案--------------------
1.既然是局域网,那应该可以搜索192.168.1.1 - 192.168.225.225这些地址的共享文件,那么当一个人上线之后,如何通知其他在线用户,我上线了。
有两种方式,一种是广播,一种是多播。多播的情况是要知道对方的IP。这些在UNIX网络编程那本书里都有说明。

2.通信协议应该选什么样的好,理由。
传输控制层协议采用TCP。因为做文件的传输不是流媒体,只要丢包,文件基本不能利用。可靠性是非常重要的。如果选UDP的话就需要自己效验了。性能也不见得好。
应用层协议,自己设计一个就行。也可以用现成的比如FTP、HTTP。不过难度就大了。

3.为了能同时和多个人传送接收文件(像迅雷多个任务同时下载),应该用多线程编程,还是socket里面那个select,再或者是多进程(感觉多进程有点奇怪)?
发送端多线程比较好,接收端可以select。

4.关于socket的NOBLOCK这些,需要用么,还是注意什么。
如果用select或者poll的话肯定需要用他。

5.不太重要的界面问题,现在看了GTK了,感觉就是函数名好长,Qt还没看,不过貌似像MFC那样(虽然也没写过MFC的程序)。 
与你想做的应用有关,现在GTK的发展前景很好。QT还是嵌入式的主流。