Конференция "Сети" » сокеты [D7, WinXP]
 
  • snupik © (01.04.08 19:15) [0]
    У меня прога с сокетами. Имеется edit1 на сервере и edit2 на клиенте. Нужно чтобы текст который пишется в edit1 отображался в edit2. У меня передается, но проблема в том, что текст в edit1 не должен отображаться и курсор не должен передвигаться, а в edit2 все отображается. Как это можно сделать?

    сервер:
    unit Unit1;
    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,WinSock;

    type
    TForm1 = class(TForm)
      Edit1: TEdit;
      procedure FormCreate(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure Edit1Change(Sender: TObject);
      procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    private
      { Private declarations }
    public
      { Public declarations }
    end;

    var
      Sock,AcceptedSock:TSocket;
      Addr:TSockAddr;
      Data:TWSAData;
      Len:Integer;
      Form1:TForm1;
      Id:DWORD;
      hThread: HWND;
    implementation

    {$R *.dfm}

    function FThread(Parameter : Pointer):Dword;
    begin
    WSAStartup(makeword(1,1),Data);

    Sock:=Socket(AF_Inet, Sock_Stream, 0);
      if Sock = INVALID_SOCKET then
        begin
         ShowMessage( 'Íå ìîãó ñîçäàòü ñîêåò');
          CloseSocket(Sock);
        end;
    Addr.sin_family:=AF_Inet;
    Addr.sin_addr.S_addr:=Inet_Addr('127.0.0.1');
    Addr.sin_port:=htons(1024);

    if Bind(Sock,Addr,SizeOf(TSockAddr))= SOCKET_ERROR  then
      begin
        ShowMessage('Íå ìîãó ñâÿçàòüñÿ');
        CloseSocket(Sock);
     end;

    Listen(Sock,1);

    Len:=SizeOf(TSockAddr);
    AcceptedSock:=Accept (Sock, @Addr, @len);
     if (AcceptedSock= INVALID_SOCKET)  then
        begin
          ShowMessage('êëèíò íå ïðèñîåäèíèëñÿ')  ;
        end;

    result:=0;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    hThread:=CreateThread(Nil, 0, @FThread, nil, 0, Id);
    end;

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    CloseSocket(Sock);
    CloseSocket(AcceptedSock);
    TerminateThread(hThread,0);
    end;

    procedure TForm1.Edit1Change(Sender: TObject);
    var S:string;
      I: integer;
      buf: array[0..255] of Char;
    begin

    end;

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var S:string;
      I: integer;
      buf: array[0..255] of Char;

    begin
    S:= Edit1.Text;

     Edit1.Text := Edit1.Text + key;
     Key := #0;

    FillChar(buf,256,0);
    move(s[1],buf,length(s));
    Send(AcceptedSock,buf,sizeof(buf),0);

    end;

    end.

    клиент:
    unit Unit2;
    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,WinSock;

    type
    TForm1 = class(TForm)
      Edit1: TEdit;
      Label1: TLabel;
      procedure FormCreate(Sender: TObject);
      procedure FormDestroy(Sender: TObject);

     private
      { Private declarations }
    public
      { Public declarations }
    end;

    var Sock:     TSocket;
      Addr:  TSockAddr;
      Data:  TWSAData;
      Form1: TForm1;
      hThread: HWND;
      Id:DWORD;
      Buf: array[0..255] of Char;
    implementation

    {$R *.dfm}

    function FThread(Parameter : Pointer):Dword;
    var    s:string;
         I:integer;

    begin
       while True do
          begin
           // Recv(Sock, I,sizeof(integer),0);
           // s := StringOfChar(' ', I);
           // Recv(Sock, s[1], length(S),0);
            Recv(Sock, buf,sizeof(buf),0);
            SendMessage(Form1.edit1.Handle,wm_settext, 0 , integer(@buf));
       end;
    result:=0;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    WSAStartup(makeword(1,1),Data);
      Sock:=Socket(AF_INET, Sock_Stream, 0);
        while  Sock = INVALID_SOCKET do
          begin
            ShowMessage( 'Íå ìîãó ñîçäàòü ñîêåò');
            CloseSocket(Sock);
          end;

      Addr.sin_family:=AF_Inet;
      Addr.sin_port:=htons(1024);
      Addr.sin_addr.S_addr:=Inet_Addr(PChar('127.0.0.1'));
      Connect(Sock,Addr,SizeOf(TSockAddr));

    hThread:=createThread(Nil, 0, @FThread, nil, 0, Id);
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    CloseSocket(Sock);
    TerminateThread(hThread,0);
    end;

    end.
 
Конференция "Сети" » сокеты [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0]