RT,TCP/IP通讯和UDP通讯都行,我现在还搞不清 winsock socketserver socketclient TCPserver TCPlient在delhi7下有什么区别~最好有控件的说明啦 新手,谢啦

解决方案 »

  1.   

    协议都是一样的,就看你的单片机接受什么样的协议,接收什么样的数据,使用indy组件就可以
      

  2.   

    哦 听说D7的INDY代替了socketserver socketclient 请问有没有例子呢?下面一个例子里是SERVER的代码,有几句看不懂,知识不够全面,API就大概看了看,红色的可以注释一下么....还有本例子中没有看到DLL和可视控件,它调用的WinSock库是哪里来着的,已经封装成类么?不解unit ServerMain;interfaceuses
      Windows, Messages, WinSock, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ImgList, ToolWin, XPMan, Menus, ExtCtrls;
    const
       WM_WORK1_ACCEPT = WM_USER + 12;
       WM_WORK1_READ = WM_USER + 13;

    type
      TForm1 = class(TForm)
        StatusBar1: TStatusBar;
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        ToolButton2: TToolButton;
        ToolButton3: TToolButton;
        ImageList1: TImageList;
        XPManifest1: TXPManifest;
        PopupMenu1: TPopupMenu;
        N8: TMenuItem;
        Panel1: TPanel;
        ListBox1: TListBox;
        Memo1: TMemo;
        Splitter1: TSplitter;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure ToolButton3Click(Sender: TObject);
        procedure ToolButton1Click(Sender: TObject);
        procedure N8Click(Sender: TObject);
      private
        { Private declarations }
        procedure InitSocket;
        procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT;
        procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ;
      public
        { Public declarations }
      end;  TCarCache = Record
          Pzh: String[10];
          Cz: String[20];
          Zs: Integer;
      end;
    var
      Form1: TForm1;
      Server_Socket : Integer;    //服务器Socket号码
      Conn_Socket : Integer;    //连接后Socket号码implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
        //初始化
        InitSocket;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
        //释放WInSOck
        WSACleanup();
    end;procedure TForm1.OnWork1Accept(var message: TMessage);
    Var
        Client_Addr: TSockAddr;
        ClientLen: Integer;
    begin
        FillChar(Client_Addr,Sizeof(Client_Addr),0);    ClientLen := Sizeof(Client_Addr);
        Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);
        StatusBar1.Panels[1].Text := '已连接';
        ToolButton1.Enabled := true;
        ToolButton3.Enabled := true;
        //读取/关闭 事件
        WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);
    end;                                                                                  procedure TForm1.OnWork1Read(var message: TMessage);
    Var
        Buff: String[100];
        RET: Integer;
    begin
        CASE WSAGETSELECTEVENT(message.lParam) OF
            FD_READ:
            begin
                Ret := Recv(Conn_Socket,Buff,Sizeof(Buff),0);
                if Ret = SOCKET_ERROR then
                begin
                    showmessage('Read Error!');
                end
                else if Ret > 0 then //接收
                begin
                    ListBox1.Items.Add(Buff);
                    //返回
                    Send(Conn_Socket,Buff,Sizeof(Buff),0);
                end; 
            end;
            FD_CLOSE:
            begin
                StatusBar1.Panels[1].Text := '已断开';
                ToolButton1.Enabled := false;
                ToolButton3.Enabled := false;
            end;
        end;
    end;procedure TForm1.ToolButton3Click(Sender: TObject);
    var
        Buff: String[100];
        i: Integer;
    begin
        for i := 0 to Memo1.Lines.Count - 1 do
        begin
            Buff := Memo1.Lines[i];
            Send(Conn_socket,Buff,sizeof(Buff),0);
        end;
        Memo1.Clear;
    end;procedure TForm1.ToolButton1Click(Sender: TObject);
    begin
        CloseSocket(Conn_socket);
        StatusBar1.Panels[1].Text := '已断开';
        ToolButton1.Enabled := false;
        ToolButton3.Enabled := false;
    end;procedure TForm1.N8Click(Sender: TObject);
    begin
        ListBox1.Clear;
    end;procedure TForm1.InitSocket;
    Var
        XL_WSADATA:TWSADATA;
        Sa: SockAddr_In;
        RET:Integer;
    begin
        //初始化WinSock库
        RET:=WSASTARTUP(MakeWord(2,2),XL_WSADATA);
        IF RET=0 THEN
        begin
            //建立Sock
            Server_Socket:=Socket(PF_INET,SOCK_STREAM,0);
            IF Server_SOCKET=INVALID_SOCKET THEN
            begin
                Application.MessageBox('SOCKET创建失败','注意',mb_ok)
            end;
            //邦定
            Sa.sin_family := PF_INET;
            Sa.sin_port := Htons(8080);
            Sa.sin_addr.s_addr := INADDR_ANY;
            RET := Bind(Server_Socket,Sa,sizeof(Sa));
            IF RET = SOCKET_ERROR then
            begin
                Application.MessageBox('SOCKET邦定失败!','注意',mb_ok)
            end;
            //监听
            Ret := Listen(Server_Socket,1);
            if Ret <> 0 then
            begin
                Application.MessageBox('监听失败!','错误信息',MB_OK);
                Exit;
            end;
            //连接事件
            WSAAsyncSelect(Server_Socket,Form1.Handle,WM_WORK1_ACCEPT,FD_ACCEPT);
        end;
    end;end.
      

  3.   

    没有显示颜色,我就剪下来贴上了
    1. const
       WM_WORK1_ACCEPT = WM_USER + 12;
       WM_WORK1_READ = WM_USER + 13;
    2.
     procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT;
        procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ;3.FillChar(Client_Addr,Sizeof(Client_Addr),0);
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdTCPConnection, IdTCPClient, IdBaseComponent,
      IdComponent, IdTCPServer;type
      TForm1 = class(TForm)
        IdTCPServer1: TIdTCPServer;
        IdTCPClient1: TIdTCPClient;
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure IdTCPServer1Execute(AThread: TIdPeerThread);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      self.IdTCPClient1.Host:='127.0.0.1';
      self.IdTCPClient1.Port:=9999;
      try
        self.IdTCPClient1.Connect(5000);
        self.IdTCPClient1.WriteLn('hello world');
        self.IdTCPClient1.Disconnect;
      except
        on e:exception do
          memo1.Lines.Add(e.Message);
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      self.IdTCPServer1.DefaultPort:=9999;
      self.IdTCPServer1.Active:=true;
    end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      cmd: string;
    begin
      with AThread.Connection do
      begin
        cmd:= ReadLn();
        memo1.Lines.Add(cmd);
      end;
    end;end.
      

  5.   

    用delphi自带得socket简单就可以实现
      

  6.   

    都是 TCP/IP 协议的封装,看喜好使用
      

  7.   

    你的单片机的通信程序做好了吗?我也有类似的问题想请教!希望得到帮助!
    邮箱:[email protected]