Хочу Создать TCP / сервер и получать данные от нескольких клиентов в текстовом формате. Длина данных никогда не превышает 1024 символов.
Я использую следующий код, но я не уверен, что это правильный путь, я думаю, это может быть самый простой способ, как myString = Socket.ReceiveText
Я ожидаю около 100+ симулировать соединения.
Что-нибудь, что я могу сделать, чтобы сделать это лучше?
indy - это не выбор, и я работаю в Delphi 5
unit Unit1;
interface
uses
ScktComp, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
private
{ Private declarations }
public
{ Public declarations }
end;
TClientThread = class(TServerClientThread)
private
Received_text: string;
fsocketStream: TWinsocketStream;
public
procedure ClientExecute; override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TClientThread.ClientExecute;
var
Data: array[0..1023] of char;
begin
inherited FreeOnTerminate := TRUE;
fsocketStream := TWinSocketStream.Create(ClientSocket, 1000);
try
while not Terminated and ClientSocket.Connected do
try
FillChar(Data, SizeOf(Data), 0);
try
if fsocketStream.Read(Data, SizeOf(Data)) = 0 then
begin
ClientSocket.Close;
Terminate;
end;
except
ClientSocket.Close;
Terminate;
end;
Received_text := Data;
//Process Data HEre
//process the data Like Read From SQL and Take actions Depence on data received
//****************************************************************
try ClientSocket.sendtext('Hello From MultiThread Server'); except end;
finally
fsocketStream.Free;
end;
except
HandleException;
end;
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode := 0;
end;
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread := TClientThread.Create(False, ClientSocket);
end;
end.
вот второй пример.
Я думаю, что для моих лекарств лучше
Received_text:=Received_text+clientsocket.ReceiveText;
if pos(#13#10,Received_text)>0 Then
begin
try clientsocket.SendText(#13#10+'REC='+Received_text+#10#13);except end;
Received_text:='';
end;