¹êÅç¤T¡B¼vµ²á¤Ñ«Ç¡]PART II¡^
ÂI¹ïÂIºô»Úºô¸ôÀ³¥Îµ{¦¡¤¶²Ð¡G
Ø
¥D±q¦¡(Client-Server)¬[ºc¡G
¥Ñ¦øªA¾¹±Ä³Q°Ê¼Ò¦¡¡Aµ¥«Ý¥Î¤áºÝ³s½u¡C¥Ñ¥Î¤áºÝ³s¦Ü¦øªA¾¹¡CÀ³¥Î¡Gºô¯¸¡BFTPµ¥¡C¥Ñ¦øªA¾¹´£¨Ñ«È¤áºÝªA°È¡C¦b¦øªA¾¹¤¤§t¦³Listen socket¡C
Ø
ÂI¹ïÂI(Peer-to-Peer)¬[ºc¡G
¥i¥Ñ¥ô¦ó¤@ºÝ³s½u¦Ü¥t¤@ºÝ¡C¨âºÝ¬O¦P¤@Óµ{¦¡¡CÀ³¥Î¡GÀɮפÀ¨É(ezPeer¡BKuro)¡BICQ¡BNetMeeting¡C¨CÓ¤@ÓPeer³£¦³Listen socket¡C
§ÚÌ¥i¥H±N¨CÓPeer·Q¹³¦¨§â¦øªA¾¹©M¥Î¤áºÝ¥]¦b¤@°_¡C
¤@¯ë¨Ó»¡¡AÂI¹ïÂI³s½u¥²¶·ª¾¹D¥t¤@ºÝªºIP¦ì¸m¡C³Ì²³æªº¤èªk¬O§Q¥Î¤@Ó¦øªA¾¹¡A¦s©ñ¨CÓPeerªºIP¦ì¸m¡C»Ýn®É¥t¤@ºÝIP¦ì¸m®É¡A¦V¦øªA¾¹¬d¸ß§Y¥i¡C
³o¼Ë«K¥i¥H±o¨ì»ÝnªºIP¦ì¸m¡A¶i¦æ³s½u¡C
µ{¦¡¶}µo¬yµ{¡G
Step 1: ªì©l¤ÆÂ^¨ú¼v¹³©MÁnµ©Ò»Ýªº¸ê·½.
Step
2: ·Ç³ÆÂ^¨ú¼v¹³»PÁnµ.
Step2.1: ¨ú±ohandle.
Step2.2: ³sµ²µwÅé.
Step2.3: ¨ú±o¨Ã³]©w¸ê®Æµ²ºc.
Step 3: ªì©l¤Æ¤Î³]©wÀ£ÁYµ{¦¡.
Step 4: Â^¨ú¼v¹³»PÁnµ.
Step 5: ±N¸ê®Æ§Y®É¥HÀ£ÁYµ{¦¡À£ÁY.
Step
6: ¶Ç°e»P±µ¦¬¸ê®Æ
Step6.1: «Ø¥ß³s½u.
Step6.2: serverºÝ°e¥X¸ê®Æ,
client§Y®É±µ¦¬¸ê®Æ.
Step 7: ±N±µ¦¬¨ìªº¸ê®Æ¸ÑÀ£ÁY¨Ã§Y®É¼½©ñ.
¨C¤@¨BÆJ¦CÁ|¨ä¤¤¤@Ó±N»Ýn¥Î¨ìªºfunction¬°½d¨Ò¡AÅܼƦWºÙ¶È¨Ñ°Ñ¦Ò¡A¨ä¾l©Ò»Ýnªºfunction¡A¤j¦h¥i©óvfw.h¤¤§ä¨ì¡C
if(!(hdd = DrawDibOpen()))
{
Application->MessageBox("initDisplay DrawDipOpen Error!","Error",MB_OK);
}
if(!(hdc = GetDC(hParent)))
{
Application->MessageBox("initDisplay GetDC Error!","Error",MB_OK);
}
if(!(hWndCap = capCreateCaptureWindow
( "Capture Window", WS_CHILD,
0, 0,CAPWIDTH,CAPHEIGHT, hParent,
7)))
{
Application->MessageBox("capCreateCaptureWindow
ERROR", "Error",MB_OK);
}
compressor.Init(Form1->Handle);
if(!capCaptureSequenceNoFile(hWndCap))
{
Application->MessageBox("capCaptureSequenceNoFile ERROR","Error",MB_OK);
}
lpcompresseddata = compressor.compress(lpVHdr->lpData);
void __fastcall TForm1::Button5Click(TObject *Sender)
{
ClientSocket->Port=RemotePortEdit->Text.ToInt();
ClientSocket->Address=RemoteIPEdit->Text;
ClientSocket->Open();
}
lpdecompresseddata = compressor.decompress(lpcompresseddata);
if(!DrawDibBegin(video.hdd,video.hdc,-1,-1,&video.bmpinfo.bmiHeader,CAPWIDTH,CAPHEIGHT,NULL))
{
Application->MessageBox("initDisplay DrawDibBegin Error!","Error",MB_OK);
}
if(!DrawDibDraw(video.hdd,video.hdc,0,0,320,200,&video.bmpinfo.bmiHeader,lpdecompresseddata
,0,0,CAPWIDTH,CAPHEIGHT,DDF_SAME_DRAW |
DDF_SAME_HDC))
{
Application->MessageBox("DrawDibDraw ERROR","Error",MB_OK);
}