飓风软件下载资讯频道,让您掌握最新的IT动态
软件中心
女性专栏
最新更新
下载排行
下载推荐
资讯分类
腾讯QQ下载
加入收藏
首页
业界资讯
图形图像
网络冲浪
操作系统
工具软件
办公软件
媒体动画
精文荟萃
认证考试
网页设计
技术开发
女性
专栏
娱 乐
插件下载
编程开发
声色图库
游戏外挂
网络游戏
电子特区
E 书下载
软件特区
电脑教程
在线电影
电子书库
黑客工具
网络聊天
劲乐团外挂
疯狂广告
主页浏览
浏览辅助
离线浏览
书签工具
拨号计时
邮件检测
邮件处理
邮件群发
网页制作
网页辅助
网站推广
FTP 工具
下载工具
网络共享
网络加速
更多>>>>
优化设置
系统备份
桌面工具
剪贴工具
开关定时
CPU 相关
内存工具
磁盘工具
数据备份
卸载清除
升级补丁
系统测试
系统其它
系统增强
光盘工具
删除恢复
媒体播放
桌面制作
媒体制作
媒体管理
媒体其它
光盘刻录
音频处理
音频转换
视频处理
视频转换
Winamp区
MP3制作
MP3播放
图像处理
动画制作
图像捕捉
图像转换
图片压缩
图像浏览
图标工具
图像管理
3D制作类
图像其它
压缩解压
转换翻译
文件管理
文件分割
文件更名
文件修复
文档管理
信息管理
时钟日历
计算器类
键盘鼠标
电子阅读
汉字输入
文字处理
字体工具
其它工具
小小电影
趣味软件
测字算命
桌面屏保
电脑游戏
模拟游戏
迷你游戏
影视 MTV
精彩动画
精彩FLASH
外挂下载
网络游戏
整人工具
益智游戏
游戏补丁
魔兽争霸
教育管理
文科工具
理科工具
外语学习
学前教育
电脑学习
考试系统
天文地理
电子教室
电子书库
软件教程
高考教育
病毒防治
系统安全
系统监视
网络安全
浏览安全
密码恢复
密码管理
加密解密
网吧管理
彩票工具
股票证券
商业贸易
财务管理
行政管理
出版印刷
工程建筑
机械电子
健康医药
法律法规
交通运输
租借管理
农业相关
保险行业
网吧管理
其它行业
ASP 程序
CGI 源码
PHP 源码
其他源码
网页模版
FLASH源码
阅读工具
系统教程
网络教程
软件教程
电脑教程
平面教程
经济书籍
文学书籍
武侠小说
漫画幽默
言情小说
其它书籍
教育教学
文章搜索:关键字
搜索文章标题
搜索文章内容
两者都搜索
※
高级搜索
女性
美女图片
QQ表情
QQ下载
金山毒霸2008
飓风知道
当前位置:
飓风下载
→
网络学院
→
网络冲浪
→
网络技术
→ TCP/IP Winsock编程要点
TCP/IP Winsock编程要点
TCP/IP Winsock编程要点
日期:2004年10月8日 作者:蓝点 人气:
查看:
[
大字体
中字体
小字体
]
掌握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阻塞问题
采用select函数解决,在收发前先检查读写可用状态。
A、读
例子:
TIMEVAL tv01 = {0, 1};//1ms钟延迟,实际为0-10毫秒
int nSelectRet;
int nErrorCode;
FD_SET fdr = {1, sConnect};
nSelectRet=:elect(0, &fdr, NULL, NULL, &tv01);//检查可读状态
if(SOCKET_ERROR==nSelectRet)
{
nErrorCode=WSAGetLastError();
TRACE("select read status errorcode=%d",nErrorCode);
::closesocket(sConnect);
goto 重新连接(客户方),或服务线程退出(服务方);
}
if(nSelectRet==0)//超时发生,无可读数据
{
继续查读状态或向对方主动发送
}
else
{
读数据
}
B、写
TIMEVAL tv01 = {0, 1};//1ms钟延迟,实际为9-10毫秒
int nSelectRet;
int nErrorCode;
FD_SET fdw = {1, sConnect};
nSelectRet=:elect(0, NULL, NULL,&fdw, &tv01);//检查可写状态
if(SOCKET_ERROR==nSelectRet)
{
nErrorCode=WSAGetLastError();
TRACE("select write status errorcode=%d",nErrorCode);
::closesocket(sConnect);
//goto 重新连接(客户方),或服务线程退出(服务方);
}
if(nSelectRet==0)//超时发生,缓冲满或网络忙
{
//继续查写状态或查读状态
}
else
{
//发送
}
5、改变TCP收发缓冲区大小
系统默认为8192,利用如下方式可改变。
SOCKET sConnect;
sConnect=:ocket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
int nrcvbuf=1024*20;
int err=setsockopt(
sConnect,
SOL_SOCKET,
SO_SNDBUF,//写缓冲,读缓冲为SO_RCVBUF
(char *)&nrcvbuf,
sizeof(nrcvbuf));
if (err != NO_ERROR)
{
TRACE("setsockopt Error!\n");
}
在设置缓冲时,检查是否真正设置成功用
int getsockopt(
SOCKET s,
int level,
int optname,
char FAR *optval,
int FAR *optlen
);
6、服务方同一端口多IP地址的bind和listen
在可靠性要求高的应用中,要求使用双网和多网络通道,再服务方很容易实现,用如下方式可建立客户对本机所有IP地址在端口3024下的请求服务。
SOCKET hServerSocket_DS=INVALID_SOCKET;
struct sockaddr_in HostAddr_DS;//服务器主机地址
LONG lPort=3024;
HostAddr_DS.sin_family=AF_INET;
HostAddr_DS.sin_port=::htons(u_short(lPort));
HostAddr_DS.sin_addr.s_addr=htonl(INADDR_ANY);
hServerSocket_DS=:ocket( AF_INET, SOCK_STREAM,IPPROTO_TCP);
if(hServerSocket_DS==INVALID_SOCKET)
{
AfxMessageBox("建立数据服务器SOCKET 失败!");
return FALSE;
}
if(SOCKET_ERROR==::bind(hServerSocket_DS,(struct
sockaddr *)(&(HostAddr_DS)),sizeof(SOCKADDR)))
{
int nErrorCode=WSAGetLastError ();
TRACE("bind error=%d\n",nErrorCode);
AfxMessageBox("Socket Bind 错误!");
return FALSE;
}
if(SOCKET_ERROR==::listen(hServerSocket_DS,10))//10个客户
{
AfxMessageBox("Socket listen 错误!");
return FALSE;
}
AfxBeginThread(ServerThreadProc,NULL,THREAD_PRIORITY_NORMAL);
在客户方要复杂一些,连接断后,重联不成功则应换下一个IP地址连接。也可采用同时连接好后备用的方式。
7、用TCP/IP Winsock实现变种Client/Server
传统的Client/Server为客户问、服务答,收发是成对出现的。而变种的Client/Server是指在连接时有客户和服务之分,建立好通信连接后,不再有严格的客户和服务之分,任何方都可主动发送,需要或不需要回答看应用而言,这种方式在工控行业很有用,比如RTDB作为I/O Server的客户,但I/O Server也可主动向RTDB发送开关状态变位、随即事件等信息。在很大程度上减少了网络通信负荷、提高了效率。
相关软件参考
·
用Fireworks MX制作Windows XP风格按钮
·
创建 Windows XP 图标
·
在Windows XP以幻灯片方式浏览图片
·
怎样把Windows server 2003转换成工作站系统
·
Windows NTFS分区随心转换
·
优化Windows启动 提升性能
·
把Windows ME中的五笔拿出来
·
Windows Me中的批处理
·
Windows XP到底有多安全
·
替你的Windows Me减减肥
·
在百度中搜索TCP/IP Winsock编程要点相关信息
·
在Google中搜索TCP/IP Winsock编程要点相关信息
·
Linux系统下的源码安装工具CheckInstall
·
用户为什么不选802.11n组网?
·
无线网络中的WEP加密方式详解
·
保证交换机路由器安全的方法
·
限制局域网流量的方法
·
企业网络安全管理原则探讨
·
如何架设天龙八部私服?
·
设置组策略解决共享访问受限问题
·
如何解决ADSL连接慢的问题
·
提高网络宽带路由器使用效率
·
没有无线AP实现共享无线上网
·
如何高效解决网络访问故障
·
思科路由器出现崩溃排用除法解析原因
·
无线局域网在视频监控中的应用
·
企业无线局域网组建误区
站长推荐
经典收藏
·
怎样排除网络故障
总下载排行
周下载排行
·
什么软件可以做网页?
·
JavaBean使用技巧
·
Delphi中动态链接库(DLL)的建立和..
·
TCP/IP Winsock编程要点
·
网络测试常用命令
·
用delphi实现读取foxmail的地址。..
·
Delphi的两个实用技巧(1)播放Fla..
·
最新代理列表
·
通过连接实例解读TCP/IP协议
·
Java FTP客户端类库比较
·
巧用CSS动态控制文本的属性
·
回调函数与Delphi的事件模型
·
CA 配置(Certificate Server)
·
配置Win+Apache+PHP+MySQL+Tcomc..
·
不需要任何工具,远程屏蔽telnet..
$WeekDownTop$
相关文章
·
用Fireworks MX制作Windows XP风格按钮
·
创建 Windows XP 图标
·
在Windows XP以幻灯片方式浏览图片
·
怎样把Windows server 2003转换成工作站系统
·
Windows NTFS分区随心转换
·
优化Windows启动 提升性能
·
把Windows ME中的五笔拿出来
·
Windows Me中的批处理
·
Windows XP到底有多安全
·
替你的Windows Me减减肥