当前位置: 技术问答>linux和unix
求linux下socket编程(tcp)实现文件传送的源程序
来源: 互联网 发布时间:2015-10-22
本文导语: rt,想找个实例学习下linux下的socket编程 不需要太复杂,单线程的也可以。 谢先了! | up | 首先你是要使用标准的FTP协议还是只要实现传输文件就行??? 1.如果你要使用标...
rt,想找个实例学习下linux下的socket编程
不需要太复杂,单线程的也可以。
谢先了!
不需要太复杂,单线程的也可以。
谢先了!
|
up
|
首先你是要使用标准的FTP协议还是只要实现传输文件就行???
1.如果你要使用标准的FTP协议,那么你还是去看一下TCP/IP协议第一卷这本书,然后再下一个FTP客户端程序来看就明白了
2.如果你只是自己来实现一个简单的文件传输功能,我可以说一下简单的实现思路:
服务器:仅实现一个单线程的,就是开两个端口,一个是用于TCP连接的,等待远程客户端连接,并只能接受一个客户端,如果远端有连接,首先接受用户登录,并验证密码,用户名和密码可以在本地采用配置文件的方式,也可以采用LINUX本身所提供的用户组机制,如果通过验证,就等待远端用户下载指定的文件,如果文件存在,就协商好是使用UDP还是TCP传输,假设使用UDP传输,那么就在本地开放一个UDP端口,并等待远端也开放一个端口,相互通知对方都已准备好,并把开放好的端口号告诉对方,这时服务器端就可以读取本地文件并发送到远端了,如果本地已发送完所有数据,就通知远方关闭端口,这就实现了一次文件传输功能了!!!!!客户端的工作过程跟服务器端相互配合,具体怎么实现我就不用多说了!!!
需要注意的是:由于UDP是不可靠的传输,所以你可能需要自己附加一些验证机制比如当传输一次数据包后就可能要作一下停顿,然后传输完成后也需要校验一下文件大小,如果还要可靠一点的话,可能还要在每个数据包内加上序列号,以实现TCP所拥用的重发机制等。当然,这样做还不如直接用TCP来实现更好。第二点:要注意服务器端向客户端发UDP数据包,必须在最先建立连接的时候获取客户端的IP地址才行。第三点:如果下载大文件的话,就要使用多线程的方式来增加效率,将一个文件分段传输是一个好的实现方法,比如分成五段,由五个线程来分别发送这五段数据,最后客户端将五个分段的文件进行合并就行了,当然这样会增加编程难度。
1.如果你要使用标准的FTP协议,那么你还是去看一下TCP/IP协议第一卷这本书,然后再下一个FTP客户端程序来看就明白了
2.如果你只是自己来实现一个简单的文件传输功能,我可以说一下简单的实现思路:
服务器:仅实现一个单线程的,就是开两个端口,一个是用于TCP连接的,等待远程客户端连接,并只能接受一个客户端,如果远端有连接,首先接受用户登录,并验证密码,用户名和密码可以在本地采用配置文件的方式,也可以采用LINUX本身所提供的用户组机制,如果通过验证,就等待远端用户下载指定的文件,如果文件存在,就协商好是使用UDP还是TCP传输,假设使用UDP传输,那么就在本地开放一个UDP端口,并等待远端也开放一个端口,相互通知对方都已准备好,并把开放好的端口号告诉对方,这时服务器端就可以读取本地文件并发送到远端了,如果本地已发送完所有数据,就通知远方关闭端口,这就实现了一次文件传输功能了!!!!!客户端的工作过程跟服务器端相互配合,具体怎么实现我就不用多说了!!!
需要注意的是:由于UDP是不可靠的传输,所以你可能需要自己附加一些验证机制比如当传输一次数据包后就可能要作一下停顿,然后传输完成后也需要校验一下文件大小,如果还要可靠一点的话,可能还要在每个数据包内加上序列号,以实现TCP所拥用的重发机制等。当然,这样做还不如直接用TCP来实现更好。第二点:要注意服务器端向客户端发UDP数据包,必须在最先建立连接的时候获取客户端的IP地址才行。第三点:如果下载大文件的话,就要使用多线程的方式来增加效率,将一个文件分段传输是一个好的实现方法,比如分成五段,由五个线程来分别发送这五段数据,最后客户端将五个分段的文件进行合并就行了,当然这样会增加编程难度。