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;