客户端跟服务端用winsock API函数连接互相通信,
在服务端里不断地调用一个函数检测是否有可读数据
调用方法是:pub_SocketIsRead(socketS;1)
函数定义如下:
function pub_SocketIsRead(s:integer;nUTimeOut:integer ) : integer ;
var
LocalRead,LocalWrite,Localexcept : TFDSet ;
VTime : TTimeVal ;
NStatus : longword ;
begin
VTime.tv_sec := 0 ;
VTime.tv_usec:= nUTimeOut ;
FD_ZERO(LocalRead);
FD_Set(s,LocalRead);
NStatus := Select(0,@LocalRead,nil ,nil,@VTime);
if NStatus = SOCKET_ERROR then
result := -1
else begin
result := NStatus ;
end;
end;但当我在客户端用closesocket(socket)时,此函数仍能检测到有可读数据?为什么?
在调用closesocket(socket)之前一切收发信息正常的。
请大家帮忙
在服务端里不断地调用一个函数检测是否有可读数据
调用方法是:pub_SocketIsRead(socketS;1)
函数定义如下:
function pub_SocketIsRead(s:integer;nUTimeOut:integer ) : integer ;
var
LocalRead,LocalWrite,Localexcept : TFDSet ;
VTime : TTimeVal ;
NStatus : longword ;
begin
VTime.tv_sec := 0 ;
VTime.tv_usec:= nUTimeOut ;
FD_ZERO(LocalRead);
FD_Set(s,LocalRead);
NStatus := Select(0,@LocalRead,nil ,nil,@VTime);
if NStatus = SOCKET_ERROR then
result := -1
else begin
result := NStatus ;
end;
end;但当我在客户端用closesocket(socket)时,此函数仍能检测到有可读数据?为什么?
在调用closesocket(socket)之前一切收发信息正常的。
请大家帮忙
解决方案 »
- delphi tquery 不能add all field 不能显示数据库里表的全部字段!
- 将一个字段分为两个字段显示,Select into 的问题
- DBGrid直接修改的问题(送分了)
- fastreport分组问题?
- 各位兄弟姐妹帮个忙
- 刚刚安装了ADSL 做了个网站 http://nullspace.zhibo.net 增求意见
- 怎么通过HTTP协议,向WebServer发出URL请求,在delphi用什么控件比较好些呢
- 各位大虾,你们知道目前做OA的软件公司有多少吗?有实力的有那些呢?还有目前国内OA的市场到底怎么样啊(欢迎大家来讨论!)
- 请问如何实现label等一些文字标签的渐隐渐现效果?
- 急急急,如何获得ASCII在(129~255)对应的字符?
- 主记录和不确定数量的子数据的输入界面怎么处理?
- 动态生成报表时,如何使报表自动分页?
当A方先调用closesocket,1,A向B发一个FIN IP包,这时意味着A方将不再发出数据,暂时还可以接收数据.
2,B收到了FIN包,回复一个ACK和一个FIN包,这时B方也不再发出数据.
3,A接收到FIN包和ACK包,回复ACK包,这时A方进入CLOSE状态.
4,B接收到ACK包,也进入CLOSE状态.
"用read返回0来判断的"即是怎么操作?我的例子里 result := NStatus ;返回的就是>0的值to: halfdream
A方先调用closesocket,B方仍然可以收到N条数据,不止一条
A方先调用closesocket,B方仍然可以收到N条数据,不止一条,且内容是一样的,就是最后发的那些
HRESULT Read( void * pv, //Pointer to buffer into which the stream is read
ULONG cb, //Specifies the number of bytes to read
ULONG * pcbRead //Pointer to location that contains actual number of bytes read
);