請教使用ServerSocket元件時如何讓錯誤訊息不出現且運作繼續? |
答題得分者是:RaynorPao
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 小弟使用ServerSocket撰寫網路檔案傳輸程式的伺服器端,但是一但Client端在檔案傳輸過程中間中斷,則Server這邊就會出現Access Violation的錯誤,且程式也為之中斷,請教要如何使錯誤被跳過(不出現錯誤視窗),且程式能持續進行? 謝謝您!danielj 你好: 你的程式碼呢?? 是否方便貼上來,幫你看看?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
首先感謝RaynorPao的熱心,以下是Server端程式的重點部分,請RaynorPao及眾高手們幫忙看看… 附註:
(1)我主要是藉由Server端所收到的文字檔決定是否送出圖片及送出數量,如果在尚未傳送完畢前Client端因故離線或者是發生錯誤,則Server這邊會出現Access Violation的錯誤,原本以為在OnError那邊將ErrorCode設為0就可以了,但是好像沒那麼容易…
(2)另外,由於Client端只負責發一次text形式指令給Server,剩下就只有收資料的份,大概不會是Client端的問題,故Client端程式暫不附上… //---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString command = Socket->ReceiveText();
AnsiString filename;
if (command=="Command_1")
{
for (int i=0;i<1000;i )
{
filename.printf("d",i&);
filename=JPEG_PATH filename ".jpg";
SendImage0(filename);
}
}
else if (command=="Command_2")
SendImage0("c:\\0000.jpg");
else if (command=="Command_3")
SendImage0("c:\\0002.jpg");
}
//---------------------------------------------------------------------------
void TForm1::SendImage0(AnsiString image_name)
{
TMemoryStream *msFile=new TMemoryStream;
msFile->LoadFromFile(image_name);
MYPACK mp;
int i=0;
int block=(msFile->Size%MAX_DATASIZE==0)?
msFile->Size/MAX_DATASIZE: msFile->Size/MAX_DATASIZE 1; for(i=0; i
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 首先感謝RaynorPao的熱心,以下是Server端程式的重點部分,請RaynorPao及眾高手們幫忙看看… 附註: (1)我主要是藉由Server端所收到的文字檔決定是否送出圖片及送出數量,如果在尚未傳送完畢前Client端因故離線或者是發生錯誤,則Server這邊會出現Access Violation的錯誤,原本以為在OnError那邊將ErrorCode設為0就可以了,但是好像沒那麼容易… (2)另外,由於Client端只負責發一次text形式指令給Server,剩下就只有收資料的份,大概不會是Client端的問題,故Client端程式暫不附上… //--------------------------------------------------------------------------- void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString command = Socket->ReceiveText(); AnsiString filename; if (command=="Command_1") { for (int i=0;i<1000;i ) { filename.printf("d",i&); filename=JPEG_PATH filename ".jpg"; SendImage0(filename); } } else if (command=="Command_2") SendImage0("c:\\0000.jpg"); else if (command=="Command_3") SendImage0("c:\\0002.jpg"); } //--------------------------------------------------------------------------- void TForm1::SendImage0(AnsiString image_name) { TMemoryStream *msFile=new TMemoryStream; msFile->LoadFromFile(image_name); MYPACK mp; int i=0; int block=(msFile->Size%MAX_DATASIZE==0)? msFile->Size/MAX_DATASIZE: msFile->Size/MAX_DATASIZE 1; for(i=0; i danielj 你好: 小弟我大概已經看過你的程式碼了,應該是參考站內某篇範例改寫而成,因此, 給你一個架構上的建議 (這是我當初一直想更新的版本) ( > > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
小弟依據RaynorPao大哥的建議,修改且加入了一些程式碼,但是似乎沒有如預期的方式運作,能否請RaynorPao大哥及版上高手們再幫忙看一下,到底是那邊有問題呢?再次感謝大家!
附註:ServerSocket1ClientRead只收到過Client端"Command_1"後就再沒有進來過這個副程式了… void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
ClientMessage = Socket->ReceiveText();
AnsiString filename; if (ClientMessage.SubString(1,15) == "RecievedLength=")
{
if (StrToInt(ClientMessage.SubString(16,ClientMessage.Length())) == LastPacketSize )
{
ClientReceived = true ;
}
}
else if (ClientMessage.SubString(1,7) == "Command")
{
if (ClientMessage=="Command_1")
{
for (int i=0;i<1000;i )
{
filename.printf("d",i&);
filename=JPEG_PATH filename ".jpg";
SendImage0(filename);
}
}
else if (ClientMessage=="Command_2")
{
SendImage0("c:\\0000.jpg");
}
else if (ClientMessage=="Command_3")
{
SendImage0("c:\\0002.jpg");
}
}
}
//---------------------------------------------------------------------------
void TForm1::SendImage0(AnsiString image_name)
{
TMemoryStream *msFile=new TMemoryStream;
msFile->LoadFromFile(image_name);
MYPACK mp;
int i=0;
int block=(msFile->Size%MAX_DATASIZE==0)?
msFile->Size/MAX_DATASIZE: msFile->Size/MAX_DATASIZE 1; for(i=0; i
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |