谁有完成端口通讯程序的Delphi源码?

解决方案 »

  1.   

    http://www.cetinet.com/t_article/list.asp?indexid=1483
    非常详细
      

  2.   

    回复人: kokoog(菜鱼粥) ( ) 信誉:98 为你的热情鼓掌,但又实在是有些......
      

  3.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=2311438http://iocpclasses.sourceforge.net/ 看看IOCP的封装
      

  4.   

    楼主,请看这个简单的Delphi串行通信程序,仅供参考:
    =========================================================================
    下面是打开通信端口的过程:
    procedure TMainForm.O1Click(Sender: TObject);var
      cc:TCOMMCONFIG;
      Temp:string;
    begin
      //Open ComPort selected
      //Initialize the environment for data transmission
      Temp:='COM'+inttostr(RG1.ItemIndex+1); //select the port to use
      hComm:=CreateFile(PChar(Temp),GENERIC_READ or
                        GENERIC_WRITE,0,nil,OPEN_EXISTING,
                        0,0);    //open the ComPort selected
      if(hComm = INVALID_HANDLE_VALUE)  //if something's wrong with the opening
      then begin
             MessageBox(0,'打开通信端口错误!','请注意:',MB_OK);
             exit;
      end;{if}  GetCommState(hComm,cc.dcb);
      cc.dcb.BaudRate:=CBR_9600;
      cc.dcb.ByteSize:=8;
      cc.dcb.Parity:=NOPARITY;
      cc.dcb.StopBits:=ONESTOPBIT;  if not SetCommState(hComm,cc.dcb)
      then begin
             MessageBox(0,'通信端口设置错误!','请注意:',MB_OK);
             CloseHandle(hComm);
             exit;
      end;{if}
    end;
    =========================================================================
    下面是发送数据的过程:
    procedure TForm1.btnSendClick(Sender: TObject);
    var
      Temp:string;
      lrc:LongWord;
    begin
      if (hComm=0) then exit; //检查Handle值
      Temp:=msend.Text ;//取得传送的字符串
      //实际的传送动作
      WriteFile(hComm,PChar(Temp)^,Length(Temp), lrc, nil); // 送出数据
    end;
    ===========================================================================
    下面是接收数据的过程:
    procedure TForm1.btnReceiveClick(Sender: TObject);
    var
      Temp : string;
      inbuff: array[0..2047] of Char;
      nBytesRead, dwEvent, dwError:LongWORD ;
      cs:TCOMSTAT;
    begin
       ClearCommError(hComm,dwError,@CS);  //取得状态
           // 数据是否大于我们所准备的Buffer
       if cs.cbInQue > sizeof(inbuff) then begin
         PurgeComm(hComm, PURGE_RXCLEAR);  // 清除COM 数据
         exit;
       end;
       ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据
       //转移数据到变量中
       Temp:=Copy(inbuff,1,cs.cbInQue);
       mReceive.Text :=Temp;   // 将数据显示于Memo1 上
    end;
      

  5.   

    http://soft.56kc.com/Filedown.aspx?FID=167http://soft.56kc.com/Filedown.aspx?FID=386
      

  6.   

    那些都是牛头不对马嘴的,唉,我这有个VC的,要看不?完成端口是用的重叠IO技术中的一个特例,可以管理为数众多的IO,包括各类端口和网络通信等等