天天加油 - 助您成才
ServerSocket,ClientSocket控件源码阅读笔记
您正在看的DELPHI是:ServerSocket,ClientSocket控件源码阅读笔记。
ServerSocket ,ClientSocket 控件源码阅读笔记

本篇将通过一次Socket通信操作来对ServerSocket和ClientSocket这两个控件的源码进行一次阅读,希望能理出一个脉络来,以供大家参考。其实说得确切一点,应该是对Scktcomp这个单元进行解读,但由于这个单元的代码太多了,所以不可能面面俱到,我试图以非阻塞式的通信来一步步说明它们是怎么样封装WinSock的API的,至于阻塞式的,在ServerSocket和ClientSocket并不常用,所以这一篇就不打算说了,可能源码中会有一些忽略掉,以后有时间来补一篇阻塞式的阅读吧。虽然现在Delphi已经用Indy控件替换了SS和CS等网络控件,但毕竟这两个控件是对Socket函数进行封装,学习它怎么样封装也好吧。

在这之前,须对WinSock有一个大概的了解,但也仅止大概,对Socket编程有一个总体的掌握行了,毕竟那不是我的能力所及。想要系统一点的学习Socket,可以去网上下WinSocket的中文文档以及参考MSDN。

Socket中分服务端和客户端,它们是怎么样互交的呢,请下面图例:

图3-1就是我们所说的UDP协议,而图3-2就是TCP协议,如果是用纯API编写,大概程序流程就是那上面那样子,这里将说的是图3-2的面向连接的Socket的应用,因为SS和CS就是封装这种形式的Socket编程的。

以下是说明这个过程中各个函数的声明

在开始使用WinSock的Api的时候,必须加载WinSock Dll的相应版本,这时用到的函数是:

int WSAStartup ( word wVersionRequested, LPWSADATA lpWSAData );

wVersionRequested指定用到的WinSock的最低版本,高字节指定副版本,低字节指定主版本,关于WinSock的版本,详见MSDN。

lpWSAData结构类型,系统把加载进去的版本信息添加到这个结构中。

该函数成功返回0,不成功则返回几个错误代码之一

这个函数和WSACleanup 对应,查看MSDN

从MSDN列出一个例子:

word wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEword( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

/* Tell the user that we could not find a usable

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

  • 热门文章
  • 最近更新
  • 推荐阅读
  • DELPHI《ServerSocket,ClientSocket控件源码阅读笔记》ServerSocket,ClientSocket控件源码阅读笔记
    关于我们 | 版权申明 | 广告服务 | 友情链接 | 网站地图 | 使用帮助 | ©2006-2008 TTADD.COM