全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1724
推到 Plurk!
推到 Facebook!

關於ServerSocket如果要同時開啟兩個port接收資料

答題得分者是:microbean
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-21 13:35:39 IP:61.30.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-22 16:33:23 IP:61.62.xxx.xxx 未訂閱
對 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 一下 =_
系統時間:2024-05-06 1:55:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!