납니다..
찾아보니 '접속 시도가 시간초과 되었습니다.',소켓이 종료되었습니다.','서버가 응답하지 없습니다' 대게 이런 뜻이라는데, 도대체 어떻게 이를 해결해야 할지 모르겠습니다.
참고로, 집에서 네트웍으로 연결된 두대의 컴퓨터에서 테스트 할때는 문제가 없답니다. 다른네트웍으로 연결하려할 때 그 에러가 난답니다.
네트웍 성능의 문제가 아닐까 막연한 추측도 해보지만 확실한 증거두 없고
어찌할 바를 모르겠습니다.
이에 대한 경험을 해본 분들의 도움 부탁드립니다.
아래는 서버 프로그램 소스입니다. 단순히 서버는 클라이언트의 요구가 있을때마다 서버쪽의 날짜와 시간을 문자열로 만들어 요구했던 클라이언트에게 보내주는 역할만 합니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
ServerSocket: TServerSocket;
Panel1: TPanel;
Label1: TLabel;
edPort: TEdit;
btnOpen: TButton;
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure btnOpenClick(Sender: TObject);
private
{ Private declarations }
procedure CloseConnections;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CloseConnections;
var i : Integer;
begin
for i :=0 to ServerSocket.Socket.ActiveConnections -1 do
ServerSocket.Socket.Connections[i].Close;
end;
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var sReq, msg, SendMsg : String;
begin
sReq := Socket.ReceiveText;
case StrToInt(sReq) of
0 : begin
SendMsg :=FormatDateTime('yyyy-mm-dd hh:nn:ss',now);
msg := '클라이언트('+Socket.RemoteAddress +')에서 서버시간 요청('+SendMsg+')';
Memo1.Lines.Add(msg);
Socket.SendText(SendMsg);
end;
end;
end;
procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('클라이언트('+Socket.RemoteAddress +') 접속');
end;
procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('클라이언트('+Socket.RemoteAddress +') 접속 해제');
memo1.Lines.Clear;
end;
procedure TForm1.btnOpenClick(Sender: TObject);
begin
if ServerSocket.Active then
begin
CloseConnections;
ServerSocket.Active := False;
btnOpen.Caption := '서버 실행';
edPort.Enabled := True;
end
else
begin
ServerSocket.Active := True;
btnOpen.Caption := '실행 정지';
edPort.Enabled := False;
end;
end;
end.