zoukankan      html  css  js  c++  java
  • TCPserver通信方法

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

    Tcpserver组件属性
     LocalHostAddr  获取本地机IP;
     localport      获取本地端口;
     LocalHostName  本地计算机名称;
     BlockMode属性,可以设定TTCPServer为bmBlockingmNonBlockingmThreadBlocking这三种通讯模式;   
        
       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;

  • 相关阅读:
    JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
    ASP.NET MVC的运行机制--url的全局分析
    ASP.NET MVC
    [Android 新特性] 15项大改进 Android 4.4新特性解析
    [Android Pro] activity-alias的使用
    [Android Pro] 控制硬加速 hardwareAccelerated 在3.0才有的
    [Android Pro] Android中IntentService的原理及使用
    [SQLite] SQLite学习手册(数据库和事务)
    [Android UI] ActionBar 自定义属性
    [Android Memory] App调试内存泄露之Context篇(下)
  • 原文地址:https://www.cnblogs.com/manhuidhu/p/7283611.html
Copyright © 2011-2022 走看看