Indy10的TcpServer如何監聽同IP的多個埠? |
缺席
|
chenyk
高階會員 發表:14 回覆:95 積分:171 註冊:2002-07-08 發送簡訊給我 |
TCPserver可以用bindings來監聽多個port,並給予回應。
但網路範例多是實做聊天室,也就是Clinet端同個port不同IP。 我將DefaultPort 設為 0,bindings 加入要監聽的port的清單,如下: for n := 1 to 5 do begin tBind := tServer.Bindings.add; tBind.IP := '127.0.0.1'; tBind.Port := 5000 n; end; 但 OnExeture 卻沒收到封包,請問各位先進該如何解決? 謝謝 |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
chenyk
高階會員 發表:14 回覆:95 積分:171 註冊:2002-07-08 發送簡訊給我 |
感謝回覆。m(__)m
我使用的是 indy 10元件,關於TCP/IP 算門外漢。 我的 server收到Client的封包後,得先回覆client 'OK'封包,接著於數秒內收取A儀器上的數據再回傳給Client,否則Client會回報逾時。 我試過1支程式上有數個 TCPserver ,也試過一server對1 port,運作時開啟數個執行檔讓它們指向不同的port。 回覆'OK'都沒有問題,主要是第二階段回傳資料給Client時,用了許多公用變數,導致系統無法穩定運作。 本來想透過單一server監聽多埠來克服資料傳遞的問題,誠如先進所言,程式無法正確判斷當前處理的Client是誰。 網上範例,資料都是在OnExeture執行結束就沒了,不知先進建議的作法? |
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
chenyk
高階會員 發表:14 回覆:95 積分:171 註冊:2002-07-08 發送簡訊給我 |
可惜的是,Client端是設備上的軟體附的,我無法變更。
整個問答順序是 1.client提出要求->2.server回應收到->等待數杪->3.server送出資料 -> 4.client回應收到。 網路上的範例只完成前兩個步驟,頂多加個廣播。 我照前輩的建議,採1server 對 1 port,基本上可達到監聽的目的,目前問題卡在第三步驟。 但我的程式在執行步驟三數次後,很容易就發生存取錯誤,造成程式停止。 個人推測是送出第一組封包後,thread收到回應而和timer同時存取同一組公用變數, 在程式撰寫上,是否可以避免或更好的作法? |
dkjfso
一般會員 發表:3 回覆:21 積分:4 註冊:2005-09-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |