• 7813阅读
  • 5回复

想写一个多线程文件传输协议程序,有几个方案请教 [复制链接]

上一主题 下一主题
离线wu9961
 

只看楼主 倒序阅读 楼主  发表于: 2009-01-01
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
现在情况是这样的,A,B两台机器,A向B所要文件,并且A将所要的文件路径提供给B,B直接给A传送文件。当然这里可能还有C,D。但是传输大概意思是这样的。
现在有三种方案,大家看一下可行性与性能。
1,每个程序跑一个tcpserver,A利用UDP向B索要文件,并提供IP端口信息,B新建立tcpsocket,去链接A的tcpserver,从而发送文件。
2,每个程序跑一个tcpserver,A创建tcpsocket与B的tcpserver链接,将所要文件信息传送给tcpserver,B新建立tcpsocket传送文件。
3,每个程序跑一个tcpserver,A创建tcpsocket与B的tcpserver链接,B新建立tcpsocket与A的tcpserver链接,A将信息传递给B的tcpsocket,传送....
另外有点搞不太懂,两个线程tcpsocket可以互相通话吗,还是两面至少有一个tcpserver。
[ 此贴被wu9961在2009-01-01 23:23重新编辑 ]
离线kyosold

只看该作者 1楼 发表于: 2009-01-01
典型的c/s模式就可以啊,一个server对多个client:
A: server
B: client_1
C: client_2

1、A: listen [端口]
2、A接到有B连接后,直接开一个线程去处理这对这个client的请求

如果是unix的server的话,直接用epoll就成了,并发5000应该没问题
离线shuaiw
只看该作者 2楼 发表于: 2009-01-01
我也在写这方面的程序,采用的A方案,不过是因为一开始我的整个聊天系统都是采用的UDP,在传(大)文件时不得使用TCP。现在好像可以把内容传到对方机子内存中,不知如何写到本地硬盘。
离线wu9961

只看该作者 3楼 发表于: 2009-01-01
引用第2楼shuaiw于2009-01-01 17:33发表的  :
我也在写这方面的程序,采用的A方案,不过是因为一开始我的整个聊天系统都是采用的UDP,在传(大)文件时不得使用TCP。现在好像可以把内容传到对方机子内存中,不知如何写到本地硬盘。

QByteArray inBlock;
inBlock = tcpServerConnection->readAll();
localFile->write(inBlock);
大概利用到的api是这样的,你可以根据需要修改一下
tcpServerConnection的类型是TcpSocket
离线wu9961

只看该作者 4楼 发表于: 2009-01-01
引用第1楼kyosold于2009-01-01 16:01发表的  :
典型的c/s模式就可以啊,一个server对多个client:
A: server
B: client_1
C: client_2
.......

如果链接之后TCPSERVER建立一个tcpsocket线程去处理任务,据说这个线程只能发不能收,如果是那样的话,怎么获得A索要的文件信息。
离线wu9961

只看该作者 5楼 发表于: 2009-01-05
还有没有前辈能给点思路吗?
快速回复
限100 字节
 
上一个 下一个