»ùÓÚDelphiµÄSocket I/OÄ£ÐÍÈ«½Ó´¥(×ܽá) [ת]
ת×Ô´ó¸»ÎÌhttp://www.delphibbs.com/keylife/iblog_show.asp?xid=30049
ÀϳÂÓÐÒ»¸öÔÚÍâµØ¹¤×÷µÄÅ®¶ù£¬²»Äܾ³£»ØÀ´£¬ÀϳºÍËýͨ¹ýÐżþÁªÏµ¡£ËûÃǵÄÐŻᱻÓʵÝԱͶµÝµ½ËûÃǵÄÐÅÏäÀï¡£
¡¡¡¡ÕâºÍSocketÄ£Ðͷdz£ÀàËÆ¡£ÏÂÃæÎÒ¾ÍÒÔÀϳ½ÓÊÕÐżþΪÀý½²½âSocket I/OÄ£ÐÍ¡£
¡¡¡¡Ò»£ºselectÄ£ÐÍ
¡¡¡¡Àϳ·dz£Ïë¿´µ½Å®¶ùµÄÐÅ¡£ÒÔÖÁÓÚËûÿ¸ô10·ÖÖÓ¾ÍÏÂÂ¥¼ì²éÐÅÏ䣬¿´ÊÇ·ñÓÐÅ®¶ùµÄÐÅ£¬ÔÚÕâÖÖÇé¿öÏ£¬“ÏÂÂ¥¼ì²éÐÅÏä”È»ºó»Øµ½Â¥Éϵ¢ÎóÁËÀϳÂÌ«¶àµÄʱ¼ä£¬ÒÔÖÁÓÚÀϳÂÎÞ·¨×öÆäËû¹¤×÷¡£
¡¡¡¡selectÄ£ÐͺÍÀϳµÄÕâÖÖÇé¿ö·Ç³£ÏàËÆ£ºÖܶø¸´Ê¼µØÈ¥¼ì²é......Èç¹ûÓÐÊý¾Ý......½ÓÊÕ/·¢ËÍ.......
¡¡¡¡Ê¹ÓÃÏß³ÌÀ´selectÓ¦¸ÃÊÇͨÓõÄ×ö·¨£º
procedure TListenThread.Execute;
var
¡¡addr : TSockAddrIn;
¡¡fd_read : TFDSet;
¡¡timeout : TTimeVal;
¡¡ASock,
¡¡MainSock : TSocket;
¡¡len, i : Integer;
begin
¡¡MainSock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
¡¡addr.sin_family := AF_INET;
¡¡addr.sin_port := htons(5678);
¡¡addr.sin_addr.S_addr := htonl(INADDR_ANY);
¡¡bind( MainSock, @addr, sizeof(addr) );
¡¡listen( MainSock, 5 );
¡¡while (not Terminated) do
¡¡begin
¡¡¡¡FD_ZERO( fd_read );
¡¡¡¡FD_SET( MainSock, fd_read );
¡¡¡¡timeout.tv_sec := 0;
¡¡¡¡timeout.tv_usec := 500;
¡¡¡¡if select( 0, @fd_read, nil, nil, @timeout ) > 0 then //ÖÁÉÙÓÐ1¸öµÈ´ýAcceptµÄconnection
¡¡¡¡begin
¡¡¡¡¡¡if FD_ISSET( MainSock, fd_read ) then
¡¡¡¡¡¡begin
¡¡¡¡¡¡for i:=0 to fd_read.fd_count-1 do //×¢Ò⣬fd_count <= 64£¬Ò²¾ÍÊÇ˵selectÖ»ÄÜͬʱ¹ÜÀí×î¶à64¸öÁ¬½Ó
¡¡¡¡¡¡begin
¡¡¡¡¡¡¡¡len := sizeof(addr);
¡¡¡¡¡¡¡¡ASock := accept( MainSock, addr, len );
¡¡¡¡¡¡¡¡if ASock <> INVALID_SOCKET then
¡¡¡¡¡¡¡¡¡¡....//ΪASock´´½¨Ò»¸öеÄỊ̈߳¬ÔÚеÄÏß³ÌÖÐÔÙ²»Í£µØselect
¡¡¡¡¡¡¡¡end;
¡¡¡¡¡¡end; ¡¡¡¡
¡¡¡¡end;
¡¡end; //while (not self.Terminated)
¡¡shutdown( MainSock, SD_BOTH );
¡¡closesocket( MainSock );
end;
¡¡¡¡¶þ£ºWSAAsyncSelectÄ£ÐÍ
¡¡¡¡ºóÀ´£¬ÀϳÂʹÓÃÁË΢Èí¹«Ë¾µÄÐÂʽÐÅÏä¡£ÕâÖÖÐÅÏä·Ç³£ÏȽø£¬Ò»µ©ÐÅÏäÀïÓÐеÄÐżþ£¬¸Ç´Ä¾Í»á¸øÀϳ´òµç»°£ºÎ¹£¬´óÒ¯£¬ÄãÓÐеÄÐżþÁË£¡´Ó´Ë£¬ÀϳÂÔÙÒ²²»±ØÆµ·±ÉÏÏÂÂ¥¼ì²éÐÅÏäÁË£¬ÑÀÒ²²»ÌÛÁË£¬Äã³ò×¼ÁË£¬À¶Ìì....
Ïà¹ØÎĵµ£º
//ÉùÃ÷:
GetWindowText(
hWnd: HWND; {´°¿Ú¾ä±ú}
lpString: PChar; {½ÓÊÕÎı¾µÄ»º³åÇøµÄÖ¸Õë}
nMaxCount: Integer {Ö¸¶¨»º³åÇø´óС, ÆäÖаüº¬NULL×Ö·û; Èç¹ûÎı¾³¬³ö£¬»á±»±»½Ø¶Ï}
): Integer; {·µ»Ø×Ö·û¸öÊý, ²»°üÀ¨ÖжϵĿÕ×Ö·û; Èç¹û±êÌâΪ¿Õ»ò¾ä±úÎÞЧ, Ôò·µ»ØÁã}
//¾ÙÀý:
var
arr: ......
ÔÚ´°ÌåµÄOnMouseDownʼþÖмÓÈëÏÂÃæ¼¸ÐдúÂë¼´¿É
If Button = mbleft Then
begin
ReleaseCapture;
SendMessage(MainForm.Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
end;
Èô´°ÌåµÄ±íÃæ±»±ðµÄ¿Ø¼þÂĸǵô£¬ÔòÐèÒª°ÑÉÏÃæµÄ´úÂë¼ÓÈëÂĸǵĿؼþÀïÃæ¡£ ......
ÔÚÌÖÂÛÕâ¸ö»°Ìâ֮ǰ£¬±ØÐëҪ˵Ã÷µÄÊÇ£¬Èç¹ûÄã¸Õѧϰdelphi£¬Ç벻Ҫģ·Â£¬ÒòΪ̸²»ÉÏתÐÍ£»Èç¹ûÄãÓÃdelphiÒѾ³Éϰ¹ß£¬²¢ÇÒÊìϤhtmlÓïÑÔ¡¢ÓÐBS½á¹¹»ù´¡¡¢¶ÔJAVAÓ﷨ûÓÐÕϰ£¨Èç¹ûÄã¿´²»¶®¼òµ¥µÄ»ù´¡JAVA´úÂ룬½¨ÒéÄ㻹ÊǼÌÐøÄãµÄd°É£©£¬Ï£ÍûÕâ¶ÎÄÚÈݶÔÄãÓÐËù°ïÖú£¬´Ë»°Ìâ²»ÌÖÂÛ¾ßÌå¼¼Êõ£¬Ö»ËµËµÎÒµÄѧϰ²½ÖèºÍÐĵá£
1¡¢ ² ......
ºÜÔç×ö¹ýµÄÒ»¸ödelphiÏîÄ¿£¬°ÑÀïÃæÓõ½µÄ¼¼Êõ×ܽáһϣ¬Ö÷ÒªÊÇÕë¶ÔÏóÎÒÕâÑùµÄdelphiÐÂÊÖ£¬¼¼ÊõÉÏ×ö¸ö»ýÀÛ°É£¡
¼ÙÉèÎÒÃǵÄÊý¾Ý¿âÅäÖÃÎļþServerInfo.iniÄÚÈÝÈçÏ£º
[ServerInfo]
ServerIP=192.168.1.5
SQLDBName=Data
SQLUserID=sa
SQLPwd=
ÎÒÃǶ¨ÒåÒ»¸öÁ¬½ÓÊý¾Ý¿âµÄ¹ý ......