-
У меня прога с сокетами. Имеется 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.
|