TCPserver通信方法


http://pmaboy.blog.sohu.com/84693130.html

 

Tcpserver組件屬性
 LocalHostAddr  獲取本地機IP;
 localport      獲取本地端口;
 LocalHostName  本地計算機名稱;
 BlockMode屬性,可以設定TTCPServer為bmBlocking\bmNonBlocking\bmThreadBlocking這三種通訊模式;   
    
   bmBlocking       為阻塞模式,以同步的方式進行數據傳輸,   
   bmNonBlocking    非阻塞模式,以異步的方式進行數據傳輸,   
   bmThreadBlocking 線程異步模式,創建一個子線程與TcpClient進行通訊,在線程中以同步的方式傳輸數    據;

   如果是bmBlocking模式,可以OnAccept事件中編寫代碼     
   procedure   TForm1.TcpServer1Accept(Sender:   TObject;  ClientSocket:   TCustomIpClient);   
         //接收tcpclient的數據   
         ClientSocket.ReceiveFrom()   
          ClientSocket.ReceiveBuf()   
    
        //向tcpclient發送數據   
        ClientSocket.SendBuf()   
        ClientSocket.SendTo()   
    
 如果是bmThreadBlocking模式,可以OnGetThread事件中編寫代碼     
   procedure   TForm1.TcpServer1GetThread(Sender: TObject; var ClientSocketThread: TClientSocketThread);   
    begin   
         ClientSocketThread.ClientSocket.     
        //接收tcpclient的數據   
         ClientSocketThread.ClientSocket.ReceiveFrom()   
         ClientSocketThread.ClientSocket.ReceiveBuf()   
    
         //向tcpclient發送數據   
          ClientSocketThread.ClientSocket.SendBuf()   
          ClientSocketThread.ClientSocket.SendTo()   
 Listening    返回布爾值,是否正在偵聽
 LookupHostName  指定參數IP可以獲取其主機名;

D7-->TCPserver通信方法
1、指定其Localport屬性為大於1024值的整型值,目的是指定TCPsever1的監聽端口;
2、設定其通信方式:Blockmode;
3、打開TCPsever1監聽客戶端連接請求,TCPsever1.active:=true;
4、在TCPserver1.OnAccept事件中寫讀寫客戶端代碼;Receivebuf(char數組,長度),Sendbuf(char數組,長度)讀寫客戶端連接;

var buff:array[0..255]of char;
      tmpbuf:string;
  begin
    Clientsocket.OnReceive:=onbuff;//自定義Onbuff顯示接收到數據
    while ClientSocket.Connected  do
    begin
        if ClientSocket.WaitForData(50)then//保證無阻塞的讀數據;
        ClientSocket.receivebuf(buff[0],sizeof(buff)); //必須有這外判定不然發不出數據

        if outbuf<>'' then   //outbuf為全局變量用於接收Form中的Memo值;
        begin
        tmpbuf:=outbuf;
        outbuf:='';
        ClientSocket.SendBuf(pchar(tmpbuf)^,length(tmpbuf));
    end;

//將接收到的數據顯示到Memo
procedure Tform1.onbuff(Sender: TObject; Buf: pchar; var DataLen: Integer);
var buff:pchar;
    st:string;
    I:integer;
begin
  st:='';
  buff:=buf;
  for i:=0  to datalen do
  begin
  st:=st+ buff^;
  inc(buff);
  end;
  self.memo1.Lines.Add(st) ;
end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM