如何寫連接多個TcpClient(不同埠號)的Tcpserver |
缺席
|
chenyk
高階會員 發表:14 回覆:95 積分:171 註冊:2002-07-08 發送簡訊給我 |
我使用Delphi7內建的TTCPServer元件建立tcpserver,Client端是機器上的PC,它提供5個 tcpclient 收/送封包
每個tcpclient 的 port 都不同(10001~10005)。 我嘗試 1 對 1 連線,可以正常作業, 但我設置5個tcpserver ,來對應每一個port,跑一段時間就會出現記憶體存取錯誤,存取log也很容易出現 I/O Error 32。 之後我將tcpserver 執行檔複製5份,一個執行檔對應一個port, 雖然不再記憶體錯誤,接收個幾次之後,某幾支server就沒有回應(無窮迴圈?),從log觀察,server似乎會收到別的port的封包。 請問是否server 程式架構上有問題,我該如何讓它可以作業? Client端是機器附的,所以只能修改 server 來配合它。 底下源碼是server接收封包的事件: [code delphi] procedure TTcpMastBase.DoOnAccept(Sender: TObject; ClientSocket: TCustomIpClient); var nLen, nSocketID: Integer; nCheckSum: Byte; aRecordBuf: TByteDynArray; begin with ClientSocket, Self.ServerSocketThread do begin nSocketID := ThreadPool.IndexOf( GetThreadObject); m_nTrsState := TRS_STANDBY; // while( Connected AND Link) do begin if ( m_nTrsState = TRS_STANDBY)then begin FillMemory( @m_aRecData[ 0], Length( m_aRecData) *SizeOf( Byte), $0); nLen := ReceiveBuf( m_aRecData, SizeOf( m_aRecData)); if ( nLen < 1)then Continue; SetLength( aRecordBuf, nLen); CopyMemory( aRecordBuf, @m_aRecData[ 0], nLen); end; //拆解封包資料 nLen := SplitData( aRecordBuf); if ( nLen > 0)then begin SendBuf( m_aSendData[ 0], nLen); end; end; //while loop end end; end; [/code] |
chenyk
高階會員 發表:14 回覆:95 積分:171 註冊:2002-07-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |