那种方式发送文件好

netyou 2003-10-18 11:47:52
用SendBuf拆包发送文件和NMStrm,NmStrmServ采取流的方式发送文件比较那一个好一些,优点是什么?
...全文
68 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluedodo 2003-10-21
  • 打赏
  • 举报
回复
我也想发送文件,但可以用附件的方式吗?这样是不是简单一些~~
duduwolf 2003-10-20
  • 打赏
  • 举报
回复
BOOL SendStream(AnsiString addr, u_short port, TMemoryStream* Stream)
{
char buf[PACKAGESIZE];
int block = 0;
SOCKET s;
Stream->Seek(0,soFromBeginning);
block = floor(Stream->Size/sizeof(buf));

s = Connect_Server(addr,port);
if (!s) {
//发送数据失败
return false;
}
for (int i = 1; i<=block; i++) {
Stream->Read(buf,sizeof(buf));
Stream->Seek(i*sizeof(buf),soFromBeginning);
if (s) {
send(s,buf,sizeof(buf),0);
}
else
return false;
Application->ProcessMessages();
}
int others = Stream->Size-(block*sizeof(buf));
if (others>0) {
if (s) {
Stream->Read(buf,others);
send(s,buf,others,0);
}
else
return false;
}
closesocket(s);
return true;
}

// 从远程主机的指定端口接收数据流
BOOL RecvStream(SOCKET s, TMemoryStream* Stream)
{
char buf[PACKAGESIZE];
struct sockaddr_in client;
int ns;
int namelen;
int pktlen;

namelen = sizeof(client);
if ((ns = accept(s, (struct sockaddr *)&client, &namelen)) ==-1) {
//Accept()失败
return false;
}
int i = 1;
for (;;i++) {
Application->ProcessMessages();
if ((pktlen = recv(ns,buf,sizeof(buf),0))<0) {
//接收数据失败
return false;
}
else if (pktlen == 0)
break;
else {
Stream->Seek(0,soFromEnd);
Stream->Write(buf,pktlen);
}
}
Stream->Seek(0,soFromBeginning);
closesocket(ns);
closesocket(s);
return true;
}
pp616 2003-10-20
  • 打赏
  • 举报
回复
int send(SOCKET s,const char* buf,int len,int flags);

pp616 2003-10-20
  • 打赏
  • 举报
回复
我用send

嘻嘻:)
wyb_45 2003-10-20
  • 打赏
  • 举报
回复
自己定义数据格式发送和接收数据包
sendbuf
可以
nuaacims 2003-10-19
  • 打赏
  • 举报
回复
我用过SendBuf的缓冲方式,没有试过Stream方式,我只是要发字符,所以SendBuf简单够用了,建议用用Stream方式
netyou 2003-10-19
  • 打赏
  • 举报
回复
等待ing

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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