请问完成端口中客户端如何向服务器端上传文件

gracezhu 2006-09-03 10:45:44
文本的交互已经可以实现,现在主要是上传文件的问题。是拆分包传过去服务器端组包还是其他的方法,请大家给出意见,3ks
...全文
331 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZHENG017 2006-09-14
  • 打赏
  • 举报
回复
transmitfile.os没有规定只有server才能用transmitfile吧.
尘雨 2006-09-13
  • 打赏
  • 举报
回复
如果在客户端使用完成端口模型来WSASEND到服务端,对于传输文件,不需要分包,直接WSASend所有的字节,利用IOCP模型内部的机制会把它传递到socket缓冲区,并且send到服务端。因为是异步的,所以WSASend不会堵塞,主线程和界面不会受到影响,只不过在客户端的工作线程中,得到的完成通知的已发送字节数不一定是所有的,这里就需要再次提交WSASend剩下的字节数(一定是剩下的所有字节数)。
这样做的好处是,一次投递所有字节,会保证字节的相对顺序,而且IOCP内部的调度比起你自己分包WSASend要高效和具有伸缩性。
如果你对一个客户端,还使用分包同时投递多次WSASend,根本就没有必要用IOCP,IOCP内部已经协调的很好了,他的目的就是要你把要传得数据一次投递,根据完成通知来决定是否继续投递为完成发送的字节数。
softrain 2006-09-04
  • 打赏
  • 举报
回复
客户端还要用到完成端口?完全没必要。窗口异步模型就足够了.
一剑 2006-09-04
  • 打赏
  • 举报
回复
#include <afxinet.h>
//assumes server and file names have been initialized
CInternetSession session("My FTP Session");
CFtpConnection* pConn = NULL;

pConn = session.GetFtpConnection(lpszServerName);
//get the file
if (!pConn->PutFile(pstrLocalFile, pstrRemoteFile))
//display an error
delete pConn;
session.Close();
stavck 2006-09-04
  • 打赏
  • 举报
回复
一般都是分块传输,包头中添加一个ID用于标识各个包的顺序。
DentistryDoctor 2006-09-04
  • 打赏
  • 举报
回复
对于此问题,在Socket层面上与传输一般的二进制数据无异。一般需要将文件分拆,接收端进行组合成文件。
stavck 2006-09-04
  • 打赏
  • 举报
回复
http://blog.csdn.net/stavck/archive/2006/08/31/1150702.aspx
acejoy 2006-09-04
  • 打赏
  • 举报
回复
TransmitFile最好。
stavck 2006-09-04
  • 打赏
  • 举报
回复
那个例子我看过,初学的话有些帮助,要想做完成端口服务器,还差很远很远。
那个例子中,你需要在DataAction函数中判断是那个客户端传过来的数据,然后向相应的文件中写入收到的数据。
不建议用那个例子去构建你自己的服务器。
你搜索一下这个论坛,曾经有很多讨论。
gracezhu 2006-09-04
  • 打赏
  • 举报
回复
谢谢大家的意见,再把我的问题说明一下:
我使用的IOCP例子是:
http://www.vczx.com/article/show.php?id=638
这里面实现了echo的功能,我现在是想将其扩展为客户端可以向服务器端传送文件,(当然服务器向客户端发送文件,使用TransmitFile,这个较简单)
但在这个CompletionPortModel类里面
我现在还不清楚怎么在完成端口处理线程处理文件的接收。
它的部分示例代码如下:
DWORD __stdcall CompletionRoutine(LPVOID Param)
{
switch(lpPerIoContext->IoOperation)
{
case IoRead:
pThis->HandleData(lpPerIoContext, IO_READ_COMPLETION);
bSuccess = pThis->DataAction(lpPerIoContext, lpNewperHandleContext);
if (FALSE == bSuccess)
{
continue;
}
。。。
}
}
}
IT有个圈儿 2006-09-03
  • 打赏
  • 举报
回复
帮顶!JF!学习!看楼下的!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧