目前做了一个TCP聊天工具,能够实现群聊私聊. 我的程序模仿的网上的一个例子,我将他改了一点(登陆:11--用户,群聊:22--发送者--时间--内容,私聊:33--接受者--发送者--发送时间--内容)现在想加入客户端之间文件传输.目前想法是发送文件的时候,通过服务器双方获取到对方主机名.IP.使用DatagramSocket(客户端互连),将文件发送出去.方法是否可行.DatagramSocket的端口号是否要跟ServerSocket的端口区别开.
如果想用TCP传输文件,假设文件接受消息头为55 ,就变成 55--接受者--发送者--文件名--文件数据 ???
还是怎么做呢,,求思路,,不要代码..我的脑子有点笨, 望高人用通俗点的话解答...~~~Orz
如果想用TCP传输文件,假设文件接受消息头为55 ,就变成 55--接受者--发送者--文件名--文件数据 ???
还是怎么做呢,,求思路,,不要代码..我的脑子有点笨, 望高人用通俗点的话解答...~~~Orz
我这里建议你每一个传输文件可以开一个线程输送,用1个socket,当然这是为了方便,性能上的话可以用多个socket,每个socket传送文件的一部分
sendID+receiveID+fileID+fileTotolBlockLeng+fileBlockSeq+fileBlockContent
发送方:
发送方ID,接收方ID,文件ID,文件总块数,文件块顺序(包头),文件块内容(包体)。
接收方需保存:
发送方ID,接收方ID,文件ID,文件总块数,已接收块数,文件块内容(包体)的合并。
可以用多线程实现多个连接(类似BT、emule)。
每次接受方收到包头后,追加到buffer,当总块数=已接收块数,且文件内容完成当次接收后,可以断开连接。其他的都要在程序里面控制。哎,几句话说不清楚啊
飞Q是使用IPMSG协议,这个协议目前我还没看源码,大概了解了它的消息是通过UDP.用户启动客户端广播我来拉其中还包括了他的机器名,主机名,IP.其他的就把他加到用户链表中..文件传输是TCP,具体怎么实现,就不清楚了,才疏学浅,嘎嘎..
断点是用户需要多开一个文件保存上次接收到的信息?通过计算出接受的长度,返回给对方,对方则从接受的长度开始继续传输???
断点需要另开文件,比如emule就有个同名的.part文件,你的思路是对的。