文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院网络技术TCP/IP Winsock编程要点
精品广告
推荐TOP10
·在web页面中打印功能的实现问题集锦
·新手轻轻松松做网管必须掌握的步骤
·ADSL路由方式的NAT(端口映射)
·保护系统 彻底清除Infostealer.Gampass病毒
·网管高招另类方法解决离奇断网故障二例
·Windows2000 下管理员账户真的不安全
·Windows下权限设置详解
·网络排障实战:路由器和交换机为何不通?
·安装网卡驱动常见故障及解决方法
·多种方法让网络共享资源自动映射
阅读TOP10
·NBTSTAT命令
·在web页面中打印功能的实现问题集锦
·如何禁止更改IE的代理服务器设置
·获取本机动态IP地址的方法
·批量查询域名工具Domain Inspect 1.5 汉化注册版
·一组关于域信任、防火墙及组策略的FAQ
·去除IE地址栏中的网址
·UNIX 常用的指令/终结完整编
·掌握超五类 双绞线的 原理与制作方法
·快速增强路由器安全的十个小技巧

TCP/IP Winsock编程要点

日期:2004年7月5日 作者:清风网络学院 查看:[大字体 中字体 小字体]


掌握TCP/IP编程对于各位想成为hacker的朋友是一个必经之路。
由于本人能力有限,大家还是将就着看吧!
在TCP/IP编程之前相信大家对它的报文格式和SOCK一定也了解了,所以也就不多废话了。
利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平,应此以下为同步方式编程要点。

  1、快速通信

  Winsock的Nagle算法将降低小数据报的发送速度,而系统默认是使用Nagle算法,使用

int setsockopt(

SOCKET s,

int level,

int optname,

const char FAR *optval,

int optlen

);函数关闭它

  例子:

SOCKET sConnect;

sConnect=:ocket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

int bNodelay = 1;

int err;

err = setsockopt(

sConnect,

IPPROTO_TCP,

TCP_NODELAY,

(char *)&bNodelay,

sizoeof(bNodelay));//不采用延时算法

if (err != NO_ERROR)

TRACE ("setsockopt failed for some reason\n");;

  2、SOCKET的SegMentSize和收发缓冲

  TCPSegMentSize是发送接受时单个数据报的最大长度,系统默认为1460,收发缓冲大小为8192。

  在SOCK_STREAM方式下,如果单次发送数据超过1460,系统将分成多个数据报传送,在对方接受到的将是一个数据流,应用程序需要增加断帧的判断。当然可以采用修改注册表的方式改变1460的大小,但MicrcoSoft认为1460是最佳效率的参数,不建议修改。

  在工控系统中,建议关闭Nagle算法,每次发送数据小于1460个字节(推荐1400),这样每次发送的是一个完整的数据报,减少对方对数据流的断帧处理。

  3、同步方式中减少断网时connect函数的阻塞时间

  同步方式中的断网时connect的阻塞时间为20秒左右,可采用gethostbyaddr事先判断到服务主机的路径是否是通的,或者先ping一下对方主机的IP地址。

  A、采用gethostbyaddr阻塞时间不管成功与否为4秒左右。

  例子:

LONG lPort=3024;

struct sockaddr_in ServerHostAddr;//服务主机地址

ServerHostAddr.sin_family=AF_INET;

ServerHostAddr.sin_port=::htons(u_short(lPort));

ServerHostAddr.sin_addr.s_addr=::inet_addr("192.168.1.3");

HOSTENT* pResult=gethostbyaddr((const char *) &

(ServerHostAddr.sin_addr.s_addr),4,AF_INET);

if(NULL==pResult)

{

int nErrorCode=WSAGetLastError();

TRACE("gethostbyaddr errorcode=%d",nErrorCode);

}

else

{

TRACE("gethostbyaddr %s\n",pResult->h_name);;

}

  B、采用PING方式时间约2秒左右

  暂略
4、同步方式中解决recv,send阻塞问题


[1] [2] [3] 下一页 

上一篇:写字板打造超酷QQ消息

下一篇:漫谈主流操作系统中可信路径安全机制


相关软件: 相关文章:
·编程特例篇——LOGO语言
·教你如何编写游戏外挂
·ASP.NET2.0下含有DropDownList的GridView编辑、删除的完整例子!
·使用UTF-8编码/JMail组件发送邮件乱码问题
·Picture Manager:一次编辑多张图片
·镜像文件编辑制作的新利器—ISO Commander
·用组策略编辑器开启XP共享目录权限

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号