求!!两台机器间能够互相发送信息的程序UDP\TCP均可!!
源程序!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,WinSock, Sockets, ScktComp;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Button2: TButton;
        Button3: TButton;
        ServerSocket1: TServerSocket;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      TThreadRead=class(TThread)
        private
          FK :TSocket;
          fbuf : array[0..255] of char;
          add : TSockAddrIn;
          procedure GetInfo;    public
          constructor Create(sock : TSocket);
          procedure Execute;override;
      end;var
      Form1: TForm1;
      SSock : TSocket;
      WSAData : TWSAData;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      ErrorCode : integer;
      SockAdd_In : TSockAddrIn;
    begin
      //´´½¨Ò»¸öÌ×½Ó×Ö
      SSock := socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
      if SSock = SOCKET_ERROR then
      begin
        showmessage(Format('%s;ErrorCode:%d',['½¨Á¢Ì×½Ó×Öʧ°Ü',WSAGetLastError]) );
        Exit;
      end;  SockAdd_In.sin_family := PF_INET;
      SockAdd_In.sin_port := htons(5150);
      SockAdd_In.sin_addr.S_addr := htonl(INADDR_ANY);  ErrorCode := bind(SSock,SockAdd_In,sizeof(SockAdd_In));
      if ErrorCode = SOCKET_ERROR then
      begin
        showmessage(Format('%s;ErrorCode:%d',['°ó¶¨Ì×½Ó×Öʧ°Ü',WSAGetLastError]) );
        Exit;
      end;
      TThreadRead.Create(SSock); // FAcceptSockThread := TAcceptSockThread.Create(FSock);
    end;{ TThreadRead }constructor TThreadRead.Create(sock: TSocket);
    begin
      FK := sock;
      inherited Create(false);
    end;procedure TThreadRead.Execute;
    var
      tm : integer;
    begin
      while not terminated do
      begin
        tm := sizeof(add);
        if recvfrom(FK,fbuf,256,0,add,tm) > 0 then
        begin
          Synchronize(GetInfo);
          Sleep(0);
        end;  end;
    end;procedure TThreadRead.GetInfo;
    var
     s : string;
    begin
       s := fbuf;
       s := s+#13 + inet_ntoa(add.sin_addr);
       Form1.Memo1.Lines.Add(s);
    end;procedure StartUp;
    var
      ErrorCode : integer;
    begin
      ErrorCode := WSAStartup($0101, WSAData);
      if ErrorCode <> 0 then
      begin
        ShowMessage('&frac14;&Oacute;&Ocirc;&Oslash;&Ecirc;§°&Uuml;');
        exit;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      ErrorCode : integer;
      buf : array[0..255] of Char;
      SockAddTo : TSockAddrIn;
      SkC : TSocket;
    begin  skc := socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
      if skc = SOCKET_ERROR then
      begin
        showmessage('&frac12;¨&Aacute;&cent;&Igrave;×&frac12;&Oacute;×&Ouml;&Ecirc;§°&Uuml;');
        Exit;
      end;  SockAddTo.sin_family := PF_INET;
      SockAddTo.sin_port := htons(5150);
      SockAddTo.sin_addr.S_addr := inet_addr('192.168.1.3');  buf :='wudi_1982';
      sendto(SkC,buf,256*sizeof(char),0,SockAddTo,sizeof(SockAddTo));//  shutdown(skc,SD_SEND);
      closesocket(skc);end;procedure TForm1.Button3Click(Sender: TObject);
      function LookupName(const Name: string): TInAddr;
      var
        HostEnt: PHostEnt;
        InAddr: TInAddr;
      begin
      HostEnt := gethostbyname(PChar(Name));
      FillChar(InAddr, SizeOf(InAddr), 0);
      if HostEnt <> nil then
      begin
        with InAddr, HostEnt^ do
        begin
          S_un_b.s_b1 := h_addr^[0];
          S_un_b.s_b2 := h_addr^[1];
          S_un_b.s_b3 := h_addr^[2];
          S_un_b.s_b4 := h_addr^[3];
        end;
      end;
      Result := InAddr;
      end;
    var
      p : pchar;
      l : DWORD;
      ht : TInAddr;
      WSAData1 : TWSAData;
    begin
       l := MAX_COMPUTERNAME_LENGTH + 1;
       p :=AllocMem(l);
       WSAStartup($0101,WSAData1);
       GetComputerName(p,l);
       ht :=LookupName(p);
       ShowMessage(inet_ntoa(ht));
       FreeMem(p);
       WSACleanup;
    end;initialization
      StartUp;
    finalization
      WSACleanup;end.
      

  2.   

    DEMO里面不是一个很简单的TCP例子嘛