網路傳輸這樣作可行嗎.. |
答題得分者是:RaynorPao
|
wun
一般會員 發表:19 回覆:20 積分:7 註冊:2002-08-24 發送簡訊給我 |
我有40台client端要在每隔7秒傳一個檔案到Server,現在我的作法是:我現在Client端是用TNMStrm物件的postIt()這個方法來傳檔...那傳到了SERVER的TNMStrmServ物件會觸發NMStrmServ1MSG()會來接收檔案...
但我怕SERVER會來不及接收,我現在想建立一個Thread物件來作接收的動作呢..那這樣就可以40個Thread來接收(不知道這樣想對不對??)可是不知道如何作.....可否教導一下呢..謝謝... 發表人 - wun 於 2003/03/04 21:25:14
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我有40台client端要在每隔7秒傳一個檔案到Server,現在我的作法是:我現在Client端是用TNMStrm物件的postIt()這個方法來傳檔...那傳到了SERVER的TNMStrmServ物件會觸發NMStrmServ1MSG()會來接收檔案... 但我怕SERVER會來不及接收,我現在想建立一個Thread物件來作接收的動作呢..那這樣就可以40個Thread來接收(不知道這樣想對不對??)可是不知道如何作.....可否教導一下呢..謝謝...wun 你好: 你現行的方式是怎麼寫的呢?? 方便把程式碼貼上來嗎?? 現在的做法你已經有實際試過了嗎?? 是否真的會造成 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
wun
一般會員 發表:19 回覆:20 積分:7 註冊:2002-08-24 發送簡訊給我 |
//送圖端
void __fastcall TClient::Net_Snap_Screen()
{
TJPEGImage *jp = new TJPEGImage();
Graphics::TBitmap *bmpBuf;
HDC hdc;
int x,y;
HCURSOR hCur;
ICONINFO IconInfo;
POINT pt;
hdc=::GetDC(0);
x=Screen->Width;
y=Screen->Height;
bmpBuf=new Graphics::TBitmap;
bmpBuf->Handle=::CreateCompatibleBitmap(hdc, x, y);
::BitBlt(bmpBuf->Canvas->Handle, 0, 0, bmpBuf->Width, bmpBuf->Height, hdc, 0, 0, SRCCOPY);
hCur=GetCursor();
IconInfo.fIcon=FALSE;
GetIconInfo(hCur, &IconInfo);
GetCursorPos(&pt);
pt.x-=IconInfo.xHotspot;
pt.y-=IconInfo.yHotspot;
DrawIcon(bmpBuf->Canvas->Handle, pt.x, pt.y, hCur);
jp->PixelFormat=jf8Bit;
jp->CompressionQuality = 10; // 設定圖像解析度(檔案大小)
jp->Assign((TPersistent*)bmpBuf);
jp->Compress();
BmpStream->Clear();
jp->SaveToStream(BmpStream);
delete bmpBuf;
delete jp;
SendImage();
}
//程式會先呼叫這個抓圖的Function
//-------------------------------------------------------------------
void __fastcall TClient::SendImage()
{
try
{
NMStrm1->Host = "163.17.9.144"
NMStrm1->PostIt(BmpStream);
}
catch(...)
{
}
BmpStream->Clear();
} //收圖端
int sn; void __fastcall TShow_Selec_Value_Form::NMStrmServ1MSG(TComponent *Sender,const AnsiString sFrom, TStream *strm)
{
char *buffer = new char[strm->Size 1];
strm->ReadBuffer(buffer,strm->Size);
RsltStream->Write(buffer,strm->Size 1);
try
{
RsltStream->Position=0;
sn ;
RsltStream->SaveToFile("c:/temp" sn ".jpg")
Refresh();
}
catch(...)
{
}
RsltStream->Clear();
}
//----------------------------------------------------------------- 當送圖端啟動了TNMStrm的PostIt()方法,就會觸發接收端NMStrmServ的NMStrmServ1MSG事件,可是我是有40台送圖同時會送圖到接收端,這樣作會不會有錯誤呢???還是要每個送圖端都要有一個Thread呢??那這樣是不是要在每個送圖端在PostIt()觸發NMStrmServ1MSG事件時產生一個Thread呢??那如果是這樣..要如何把Stream存成Flie的程式寫在Thread呢??因為Strm是NMStrmServ1MSG事件的參數..是否要把strm傳給Thread呢..要如何作呢..謝謝... 發表人 - wun 於 2003/03/05 01:04:44
|
wun
一般會員 發表:19 回覆:20 積分:7 註冊:2002-08-24 發送簡訊給我 |
|
wun
一般會員 發表:19 回覆:20 積分:7 註冊:2002-08-24 發送簡訊給我 |
包子哥您好...不好意思又要請教您一個問題了..
如果現在我把收圖端的程式交給Thread作..要如作寫呢.
因為我要處理我Strm是在NMStrmServMSG事件裡的參數..
void __fastcall TShow_Selec_Value_Form::NMStrmServ1MSG(TComponent *Sender,const AnsiString sFrom, TStream *strm)
^^^^^^^^^^^^
要如何才能把strm丟給thread處理呢...
謝謝... 發表人 - wun 於 2003/03/07 00:58:42
|
wun
一般會員 發表:19 回覆:20 積分:7 註冊:2002-08-24 發送簡訊給我 |
引言: 包子哥您好...不好意思又要請教您一個問題了.. 如果現在我把收圖端的程式交給Thread作..要如作寫呢. 因為我要處理我Strm是在NMStrmServMSG事件裡的參數.. void __fastcall TShow_Selec_Value_Form::NMStrmServ1MSG(TComponent *Sender,const AnsiString sFrom, TStream *strm) ^^^^^^^^^^^^ 要如何才能把strm丟給thread處理呢... 謝謝... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |