社区
网络及通讯开发
帖子详情
网络编程再请教,欢迎大家再来!
hsubo
2002-01-11 10:48:36
加精
SendBuf的返回值能不能代表接收端接收的情况?
比如:SendBuf的返回值为1024,能不能说接收端一定能够接收到1024字节。
如果不能,要是网络不好,是不是接收端要返回给发送端网络好坏的情况,做一个具有滑动窗口功能的收发程序?
...全文
284
37
打赏
收藏
网络编程再请教,欢迎大家再来!
SendBuf的返回值能不能代表接收端接收的情况? 比如:SendBuf的返回值为1024,能不能说接收端一定能够接收到1024字节。 如果不能,要是网络不好,是不是接收端要返回给发送端网络好坏的情况,做一个具有滑动窗口功能的收发程序?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
37 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cometofly
2002-02-07
打赏
举报
回复
哪裡有關於Socket Api編程的資料
我也要
Jagen在路上
2002-01-27
打赏
举报
回复
太棒了,几天没有来,居然有这么多高人,好人在这里面,小弟受益非浅阿,呵呵,大家有空长联系
yuyulily
2002-01-16
打赏
举报
回复
呵呵,精彩!
hsubo
2002-01-16
打赏
举报
回复
非阻塞模式下,返回值就只有count值和-1两种?让我很难想象。非阻塞方式的效率较高,难道一次最大就可以发送2G的文件了?
florist2000,redpower你们能不能提供给我一个非阻塞模式发端代码?
我原来做过非阻塞模式的程序,但我还是把一个文件包发送的,一次发8k.
常宁
2002-01-16
打赏
举报
回复
阻塞模式和非阻塞模式不同,CSocket并不是真正的异步方式,因此florist2000(善良的石头)所得没错,非阻塞方式的效率较高,使用windows内置Socket缓冲区,因此推荐使用
hsubo
2002-01-16
打赏
举报
回复
明白了,非常感谢 redpower,florist2000.......以及各位网友的精彩回复。
常宁
2002-01-16
打赏
举报
回复
当然可以一次发送2G文件,我最大测试过400M文件,2G的我就没有试验,不过理论上肯定是2G
最简单的非阻塞模式例子:(不推荐这么用)
char *buf;
buf=new char[10000000];
while(Socket->SendBuf(buf,10000000));
delete []buf;
简单吧
fenglingdu
2002-01-15
打赏
举报
回复
关注。。。
常宁
2002-01-15
打赏
举报
回复
to hsubo(bobo)
我的email:changning@ynmail.com
边界就是,如果用UDP连续不断发送10条消息,如果UDP客户端可以接收到所有的消息,即一定是10条,如果用TCP连续不断发送10条消息,TCP客户端肯定可以接收到所有消息,但一般不是10条,可能是1条,可能是2条,甚至可能是100条,这是因为UDP发送的是消息报(有边界)而TCP发送的是流(无边界)当然,如果将收到的100条消息连在一起,肯定与发送的内容连在一起完全一致
常宁
2002-01-15
打赏
举报
回复
to:florist2000(善良的石头)
我想你应该是个学生吧,Corba编程如果打算实现Socket的消息发送接收功能,可以说相当简单,并不是你说的很复杂,我想Corba的复杂性体现在更高级的应用上,如果仅发送消息,我看代码的长度同DCOM 差不多,而远远小于可靠传输的TCP.
如果用于传输大文件,或流比如音频/视频的时候,10M网络的传输性能可以超过700k/s也就是说如果一个包70字节可以发送10000次,而如果在100M上更高达6000k/s也就是高达100000次/秒但是这同正常的消息通讯相差甚远,不具备比较性!顺便说一下VC 的CSocket效率大概仅是TCustomSocket的1/10.这效率其实已经很高了
我是做消息中间件的智能代理(Smart Agent)和消息路由的,从软件角度看应该是属于服务器端,而不是你说的客户端,INDY组件的稳定性不错,但是效率不高,而且是阻塞方式的,我们不用,尽管TCustomSocket不能跨平台而Indy可以,作为高效率和高可靠性的开发,我们选用了TCustomSocket,这是我们多方面比较的结果包括API和Indy!我们的系统总共已经运行了数千亿次,没有出现任何问题。
我们现在要实现的中间件将基于Corba而不是Socket这是一种趋势,corba可以10000次/秒远程调用,其速度已经可以满足大多数的需要了。而提供的附加功能却是强大的。
欢迎讨论,如果觉得不过瘾,我的QQ:28246466 别炸我,嘻嘻嘻
对了,别忘了,软件开发的美德之一---〉简单是美
通一
2002-01-15
打赏
举报
回复
哪裡有關於Socket Api編程的資料
我也要
florist2000
2002-01-15
打赏
举报
回复
这个是阻塞模式的代码
他说的是非阻塞模式的代码.
hsubo
2002-01-15
打赏
举报
回复
to redpower:
你的意思就是: SendBuf(Buffer,Count)的返回值只可能有两个值,一个是Count,一个就是-1,
对吧?
你看一下这个程序:
int __fastcall TC5678Socket::SendPackage ( BYTE * msg, int Size )
{
int sendcount=0,curcount;
DWORD timer = GetTickCount ();
while (sendcount < Size )
{
curcount = CSocket->Socket->SendBuf ( msg + sendcount, Size - sendcount );
if ( curcount <= 0 )
curcount = 0;
else
timer = GetTickCount ();
if ( ( GetTickCount() - timer ) > 10000 )
{//如果10秒钟没有发出一个字节则认为次连接断开
CSocket->Active = false;
return sendcount;
}
sendcount += curcount;
}
return sendcount;
}
这是一个网友提供给我程序。
如果像你说的,最大一次可以发2G,返回值只有count值和-1两种,那岂不是可以不用那个while循环了?
hsubo
2002-01-15
打赏
举报
回复
to redpower
返回值真的可以最大达到2G?(在非常理想的情况下)
hsubo
2002-01-15
打赏
举报
回复
tcp的窗口大小怎么不是64k?
在tcp头,窗口不是用2字节表示的吗? 2字节不就可以表示到64k?
常宁
2002-01-15
打赏
举报
回复
to hsubo(bobo)
1、SendBuf方法一次发送的数据最大是不是64k?也就是tcp的最大窗口值?
答:SendBuf一次发送最大为2G,不是64k
2、ret=SendBuf(Buffer,Count)中的返回值ret最大是不是64k?
答:不是最大2G,这就是效率很高的原因,它并不是简单封装了WinSocket,它的异步缓冲机制是一流的。
3、返回值ret的含义就是tcp的最大窗口值,能不能这样讲?
答:不是,它是发送的字节数,再异步模式下,成功发送是SendBuf(buffer,count)发送中制定的count的值,失败发送是-1,我没有见到过在这之间的返回值。
常宁
2002-01-15
打赏
举报
回复
to:florist2000(善良的石头)
看了你的文章觉得同你的争论可以告一段落了,不是面对面,我没有兴趣辩论了。
如果仍打算交流,用QQ吧
florist2000
2002-01-15
打赏
举报
回复
内部缓冲区的大小一般是80k左右(所有的mbuf加簇的总和)
你发64k数据可能会内部缓冲区容纳不下,所以在非阻塞的套节字情况下
将返回-1数据不拷贝到内部缓冲区
如果比较小,内部缓冲区能拷贝下,那么就吧这些数据都拷贝到里面了,返回发送的数目.
在阻塞的情况下不一样
返回的是发送了的数据,但是很多情况下只发送一部分数据
这就是所谓的成功一般的情况
所以你使用阻塞套节字的时候,需要做一个循环,知道所有的都发送出去
这时候最好和多线程配合,阻塞套节字的性能应该比非阻塞的好,在很多情况下.
但是非阻塞的套节字编程简单.
本人对BCB网络控件不很了解,误导阁下,请勿怪罪.
florist2000
2002-01-15
打赏
举报
回复
对于阻塞的套节字,返回的值就是实际发送的数据(不一定和你要发送的一样多)
对于非阻塞的套节字,返回的是传递到内部缓冲区的数据数(不一定和你发送的一样多)
阻塞的套节字不会立即返回,而非阻塞的会立即返回.
tcp的窗口最大值不是64k,
虽然一个ip包有16位的长度标志,但是那是理想情况
实际上一个Ip包一般限制在1024字节或者更少之内,
所以,你传递非常大的数据,它其实需要分片发送的.
hsubo
2002-01-15
打赏
举报
回复
返回值ret的含义就是tcp的最大窗口值,能不能这样讲?
加载更多回复(17)
网络编程
大神速成秘籍,让你的职场竞争力飙升!
hi大家好,我是大师兄,今天让我们再一起来学习一下
网络编程
,对
网络编程
的核心知识进行梳理,希望大家早日掌握这些核心知识,打造自己坚实的基础。加入极客星球,获取更多学习资料,持续成长,厚积薄发。以上是...
python神经
网络编程
代码,python神经
网络编程
豆瓣
阶段二:Python高级编程和数据库开发Python全栈开发与人工智能之Python高级编程和数据库开发知识学习内容包括:面向对象开发、Socket
网络编程
、线程、进程、队列、IO多路模型、Mysql数据库开发等。
编程入门应该先学什么
为了帮助大家更好的学习网络安全,小编给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶...
读书几年收藏的编程利器网站,给大家分享出来
大家好,我是bigsai,今天给大家分享几个非常适合程序员编程学习的网站。 工欲善其事,必先利其器,有好的武器才能打更好的仗,今天给大家分享一些程序员学习必备的编程学习网站。 像谷歌、知乎、B站、各大博客这些...
开启编程之旅
空杯心态,遇到问题自己思考,实在不会
请教
他人,编程是门技术,多敲代码保证一最少周五天时间都在gitee上提交代码,每天最少两小时学习编程的时间,
欢迎
大家监督(希望通过自己的努力在毕业时可以进入字节跳动这家...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章