Red de conocimiento informático - Computadora portátil - ¿Problema de comunicación entre el socket del servidor y el socket del cliente de Delphi?

¿Problema de comunicación entre el socket del servidor y el socket del cliente de Delphi?

Código fuente de serversocket:

const

CMax=10; //Número máximo de conexiones de cliente, establecido por usted mismo para requisitos específicos

escriba

client_record=record

CHandle: integer; // Identificador del socket del cliente

CSocket:TCustomWinSocket; //Socket del cliente

CName:string; //Nombre de la computadora del cliente

CAddress:string; //Dirección IP de la computadora del cliente

CUsed: boolean; //Indicador en línea del cliente

end ;

///////////////

sesión: matriz[0..CMax] de client_record // matriz de conexión del cliente

Sesiones: entero;

//Abre la conexión del socket y pon el socket en estado de escucha

procedimiento TfrmServerMain.tbConnectClick( Sender: TObject);

comenzar

serversocket.Port:=9999;//Puerto de escucha

ServerSocket.Open;

fin ;

/ /Cerrar la conexión del socket y ya no escuchar las solicitudes de los clientes

procedimiento TfrmServerMain.tbDisconnectedClick(Sender: TObject);

comenzar

ServerSocket.Close;

StatusBar.Panels[0].Text :='La conexión del socket del servidor se ha cerrado y la solicitud de conexión del cliente no se puede aceptar.';

end;

//Leer información del cliente

procedimiento TfrmServerMain.ServerSocketClientRead(Sender: TObject;Socket: TCustomWinSocket);

var

i:integer;

comenzar

//Agregar la información leída del cliente a Memo1

Memo1.Lines.Add(Socket .ReceiveText);

para i :=0 para que las sesiones

comiencen

//Obtenga el cliente coincidente

si la sesión [i].CHandle = Socket.SocketHandle entonces

comenzar

sesión[i].CSocket.SendText('Responder al cliente'+sesión[i].CAddress+' ==> '+Edit1.Text);

finalizar ;

end;

end;

//El socket del lado del servidor ingresa al estado de monitoreo para monitorear las conexiones del cliente

procedimiento TfrmServerMain.ServerSocketListen(Remitente: TObj

ect;Socket: TCustomWinSocket);

comenzar

StatusBar.Panels[0].Text :='Esperando conexión del cliente...';

finalizar ;

//Cuando el cliente se conecta al servidor

procedimiento TfrmServerMain.ServerSocketClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

var

i,j:integer;begin

comenzar

j:=-1;

para i:= 0 a sesiones hacer

comenzar

//Hay conexiones de cliente interrumpidas en la matriz de conexión de cliente original

si no es sesión[i].CUsed entonces

comenzar

sesión[i].CHandle := Socket.SocketHandle;// Identificador del socket del cliente

sesión[i].CSocket: = Socket; //Socket del cliente;

session[i].CName := Socket.RemoteHost; //Nombre del ordenador cliente

session[i].CAddress := Socket.RemoteAddress ;//IP del ordenador cliente

session[i].CUsed := True; //La posición actual en la matriz de conexiones ha sido ocupada

Break;

end;

j:=i;

fin;

si j=sesiones entonces

comenzar

inc(sesiones);

sesión[j].CHandle := Socket.SocketHandle ;

sesión[j].CSocket := Socket;

sesión [j].CName := Socket .RemoteHost ;

sesión[j].CAddress := Socket.RemoteAddress ;

sesión[j].CUsed := True;

fin;

StatusBar.Panels[0].Text := 'Client'+Socket.RemoteHost + 'Connected';

end;

//Cuando el cliente se desconecta

procedimiento TfrmServerMain.ServerSocketClientDisconnect(Remitente: TObject;

Socket: TCustomWinSocket);

var

p>

i:integer;

comenzar

para i:=0 para sesiones

comenzar

si sesión[i].CHandle =Socket.SocketHandle entonces

comenzar

sesión

[i].CHandle :=0;

sesión[i].CUsed := False;

Interrupción;

fin;

fin;

StatusBar.Panels[0].Text :='Client'+Socket.RemoteHost + 'Desconectado';

end;

// Cerrar la ventana

procedimiento TfrmServerMain.tbCloseClick(Sender: TObject);

comenzar

Cerrar;

finalizar;

p>

procedimiento TfrmServerMain.FormCreate(Remitente: TObject);

iniciar

sesiones := 0;

finalizar;

procedimiento TfrmServerMain.FormClose(Remitente: TObject;var Acción: TCloseAction);

comenzar

ServerSocket.Close ;

finalizar;

//Cuando el cliente se conecta al servidor

procedimiento TfrmServerMain.ServerSocketGetSocket(Sender: TObject;

Socket: Integer; var ClientSocket: TServerClientWinSocket);

begin

StatusBar.Panels[0].Text :='El cliente se está conectando...';

end;

//Cliente Un error ocurrió

procedimiento TfrmServerMain.ServerSocketClientError(Remitente: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

StatusBar.Panels[0].Text :='Client'+Socket.RemoteHost +'¡Ocurrió un error! ';

Código de error := 0;

fin;

===================== =================================================

Código fuente del cliente:

procedimiento TfrmClientMain.tbConnectedClick(Sender: TObject);

comenzar

ClientSocket.Host:='127.0.0.1 ';//Conectar IP

ClientSocket.Port:=9999; //Conectar puerto

ClientSocket.Open;

end;

//Cerrar la conexión del socket

procedimiento TfrmClientMain.tbDisconnectedClick(Sender: TObject);

comenzar

ClientSocket.Close;

p>

end;

//Acepta la respuesta del servidor

procedimiento TfrmClientMain.ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);

comenzar

Memo1.Lines.Add(Socket.ReceiveText);

fin;

//Enviar información al servidor

procedimiento TfrmClientMain. tbSendClick(Remitente: TObject);

comenzar

ClientSocket.Socket.SendText(Edit1.Text);

finalizar;

procedimiento TfrmClientMain.tbCloseClick(Sender: TObject);

comenzar

Cerrar;

finalizar;

//Configurar el servidor en conectarse a la dirección

procedimiento TfrmClientMain.FormShow(Sender: TObject);

comenzar

ClientSocket.Host := SocketHost;

finalizar ;

//Ya conectado al servidor

procedimiento TfrmClientMain.ClientSocketConnect(Sender: TObject;Socket: TCustomWinSocket);

comenzar

tbSend .Enabled := Verdadero;

tbDisconnected.Enabled :=Verdadero;

btnSend.Enabled := Verdadero;

StatusBar.Panels[0]. Texto : = 'Ya conectado a'+ Socket.RemoteHost;

end;

//Conectándose al servidor

procedimiento TfrmClientMain.ClientSocket1Connecting(Sender: TObject ; Socket: TCustomWinSocket);

comenzar

StatusBar.Panels[0].Text := 'Conectando al servidor... ' ;

fin;

//Ocurre cuando se desconecta la conexión al servidor

procedimiento TfrmClientMain.ClientSocketDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

comenzar

tbSend.Enabled := False;

btnSend.Enabled := False

tbDisconnected.Enabled := False;

StatusBar.Panels[0].Text := 'Desconectado de '+ Socket.RemoteHost +'

Conexión';

fin;

procedimiento TfrmClientMain.FormClose(Remitente: TObject;

var Acción: TCloseAction);

comenzar

ClientSocket.Close ;

end;

//Cuando ocurre un error en la conexión con el servidor

procedimiento TfrmClientMain.ClientSocketError( Remitente: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;var ErrorCode: Integer);

comenzar

StatusBar.Panels[0].Texto:= 'Con Se produjo un error en la conexión del lado del servidor';

ErrorCode := 0;

end;

end.