当前位置:主页>销售管理软件> 列表

请问winsock中select如何正确使用? 找仓库进销存表格

库存管理软件版1楼: 如题

2楼: http://www.delphibbs.com/delphibbs/dispq.asp?lid=3097068 如仓库进销存表格

3楼: 用来设置各种参数的.具体可以在网上查查!

4楼: 谢谢,寻路和leaber
大致就是这样,以下代码通过调试通过,贴出来留给以后需要的朋友.
var
Client_Addr: TSockAddr;
ClientLen: Integer;
recv_buff : string[100];
ret : integer;
i : integer;
xfdset : Tfdset;
xtimeval : TTimeVal;
begin
edit3.text := '''';
for i := 0 to clients.Count - 1 do begin
fd_zero(xfdset);
fd_set(integer(clients[i]),xfdset);

xtimeval.tv_sec := 0;
xtimeval.tv_usec := 50;
ret := select(0,@xfdset,nil,nil,@xtimeval);
edit3.Text := edit3.text + inttostr(ret) +''(''+inttostr(integer(clients[i]))+'')''+ '','';
end;
......
end;

5楼: 在做非阻塞试验时我查过很多网上的内容,都很不全面,也看了一些基础知识的文档,毕竟初次试验有些东西理解不了那么深刻,我所查到比较好的一个网站的站长做的client/sever一对一的DEMO,可是无法说明一对多,就是服务器可以在ACCEPT时创建一个新的SOCKET,客户端可以启动多个,这时如果来判断服务端的SOCKET与客户端的对应关系,于是就有了上面的方法,但既然WINDOWS通过wsaasyncselect/wsagetselectevent这一组函数实现了事件的锁定与检测,却无法得到具体是哪一个SOCKET上发生的事件(如果哪位知道具体函数请告知在下:))于是就有上面这个笨办法:用select函数逐一判断其读状态.基于一对多的需要我还需要知道如何判断客户端是否close,这样就可以删除对就列表中的SOCKET,通过实验可以通过wsagetselectevent(message.lparam)=fd_close and select(0,@fdset,nil,nil,@timeval)>0 来判断,此法真的很笨,是否有更好的办法,希望大家再帮帮我.

6楼: 如果再没有回话,明天结贴.

库存管理软件版7楼: 多人接受答案了。