關於ServerSocket如果要同時開啟兩個port接收資料 |
答題得分者是:microbean
|
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
Dears:
小弟目前寫了一隻程式,是在server端要同時開啟兩個port來接收不一樣的TCP/IP資料。我使用了兩個ServerSocket元件。在ServerSocket1接收傳送都沒有問題。可是在ServerSocket2這邊,OnClientConnect事件這邊都沒有問題,client端都可以連接近來。可是在
void __fastcall TForm1::ServerSocket2ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
reCount4++;
StatusBar1->Panels->Items[8]->Text = "PD:"+IntToStr(reCount4);
String Receive=ServerSocket2->Socket->ReceiveText();
.
.
.
} String Receive=ServerSocket2->Socket->ReceiveText();這邊就會出現錯誤(我程式組譯都沒有出現問題,而是在執行的時候出現問題的。我是用除錯的模式下才發現問題事出在這裡)他會秀出
這樣的錯誤訊息。
能否煩請各位大大,幫我看看問題到底是出在哪裡? 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! |
microbean
初階會員 發表:1 回覆:43 積分:38 註冊:2004-04-09 發送簡訊給我 |
對 ServerSocket 不是很熟析 , 但以這個錯誤訊息來看
recv 丟 10057 就是 WSAENOTCONN .
意思就是當要接收資料時 , socket 斷線了 . 雖然 ReceiveText 在做 recv 之前有在檢查一次連線 ,但還是有很小的機率
在 recv 時斷線 . 斷線的原因 , 是追查的方向 , 要知道是 server 主動把 client 斷線
還是 client 自己先斷. 如果是 client 斷線 , 這還可以說得過去.
不過如果是 Server 先斷 , 可能要看你當時的網路狀況 , 機器的穩定度..等
或者 是你在 clientread 裡面做了太多複雜的事情 , 讓 socket 等不及而 Timeout 或斷線,
或是 socket 已經判斷 timeout 而你才去 ReceiveText , 狀況會蠻多種的.
你也可以試試 讓讀 socket 資料的 code 放到越上面越好..例如就放在
reCount4 ; 的上面. 如果此種狀況, 經過檢查後 , 確定都沒有問題 , 那就請用 try
去做 exception handle , 讓這種狀況 , 被特別的處理.
socket 程式的特性 , 就是可能在任何地方 , 出異常 ,
你要做比平常程式更完整的 exception handle .. 另外這個 code 有個地方我覺得怪怪的
String Receive=ServerSocket2->Socket->ReceiveText();
我覺得應該是
String Receive= Socket->ReceiveText();
因為 event 已經把 socket pointer 傳給你 , 我不太明白,
你這樣寫為何可以用 ?? 因為手上沒有 BCB 沒辦法試 粗略的看法 提供參考 希望能有幫助 _= 沒事就 winsock 一下 =_
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |