unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Win.ScktComp, Vcl.StdCtrls,
Vcl.ComCtrls, Vcl.ExtCtrls;
type
TMessage_Form = class(TForm)
ShowBox_: TRichEdit;
Btn_Send_: TButton;
Ed_Send_: TEdit;
Ed_IP_: TEdit;
Btn_IP_: TButton;
Btn_Clear_: TButton;
ClientSocket_: TClientSocket;
ServerSocket_: TServerSocket;
Btn_End_: TButton;
Timer_: TTimer;
procedure Btn_End_Click(Sender: TObject);
procedure Btn_Clear_Click(Sender: TObject);
procedure Btn_Send_Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Ed_Send_KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ServerSocket_GetSocket(Sender: TObject; Socket: NativeInt;
var ClientSocket: TServerClientWinSocket);
procedure Ed_Send_Enter(Sender: TObject);
procedure Btn_IP_Click(Sender: TObject);
procedure ServerSocket_ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ClientSocket_Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ServerSocket_ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure Timer_Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Message_Form: TMessage_Form;
//******************************************************************************
// 전역변수
//******************************************************************************
SendIP : string;
implementation
{$R *.dfm}
//******************************************************************************
// 초기 세팅 Part
//******************************************************************************
procedure TMessage_Form.Btn_Clear_Click(Sender: TObject);
begin
ShowBox_.Text:= '';
Ed_Send_.Text:= '';
end;
procedure TMessage_Form.Btn_End_Click(Sender: TObject);
begin
ServerSocket_.Close;
ClientSocket_.Close;
Message_Form.Close;
end;
procedure TMessage_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket_.Close;
ClientSocket_.Close;
end;
procedure TMessage_Form.FormCreate(Sender: TObject);
begin
ShowBox_.Text:= '';
try
ServerSocket_.Open;
ClientSocket_.Open;
except on Exception do
showmessage('초기 소켓 연결 ERR');
end;
end;
procedure TMessage_Form.Timer_Timer(Sender: TObject);
begin
if ServerSocket_.Active = False then
ServerSocket_.Open;
end;
procedure TMessage_Form.Ed_Send_Enter(Sender: TObject);
begin
Ed_Send_.Text:= '';
end;
//******************************************************************************
// 통신 Part
//******************************************************************************
//------------------------------------------------------------------------------
// ERR 소켓이 안열림!
procedure TMessage_Form.Btn_IP_Click(Sender: TObject);
var
_PreIP : String;// 이전 ip
begin
try
_PreIP := ClientSocket_.Address;
ClientSocket_.Close;
SendIP := Ed_IP_.Text;
ClientSocket_.Address := SendIP;
ClientSocket_.Open; //<- err
except on Exception do
begin
showmessage('잘못된 Ip Address..');
ClientSocket_.Address:= _PreIP;
end;
end;
end;
//------------------------------------------------------------------------------
procedure TMessage_Form.Btn_Send_Click(Sender: TObject);
begin
if ClientSocket_.Active = False then
begin
try
ClientSocket_.Open;
except on Exception do
showmessage('Btn_Send_Click - Err!!');
end;
end;
ClientSocket_.Socket.SendText(Ed_Send_.text);
ShowBox_.SelAttributes.Color := clBlue;
ShowBox_.Lines.Add('<' + SendIP + '>' + '보낸 이 : ' + Ed_Send_.text);
end;
//------------------------------------------------------------------------------
//
procedure TMessage_Form.ServerSocket_ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
RxText : String;
begin
RxText := Socket.ReceiveText;
ShowBox_.SelAttributes.Color := clRed;
ShowBox_.Lines.Add( '<' + SendIP + '>' + '받는 이 : ' + RxText);
SendIP := Socket.RemoteAddress;
RxText := Socket.LocalHost;
ShowBox_.Lines.Add(RxText);
end;
//------------------------------------------------------------------------------
// 키보드에서 엔터(13번)이 눌렸을 때 Btn_Send_의 Click 이벤트가 동작함
procedure TMessage_Form.Ed_Send_KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
Btn_Send_Click(Sender);
end;
//------------------------------------------------------------------------------
// 서버가 소켓을 얻을 때
// 상대방 기기 이름을 얻음
procedure TMessage_Form.ServerSocket_GetSocket(Sender: TObject; Socket: NativeInt;
var ClientSocket: TServerClientWinSocket);
var
UserName : String;
begin
UserName:= ClientSocket_.GetNamePath;// 사용자 이름 얻기
ShowBox_.Lines.Add(UserName);
end;
//******************************************************************************
// 통신 ERR Part
//******************************************************************************
//------------------------------------------------------------------------------
procedure TMessage_Form.ClientSocket_Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
end;
//------------------------------------------------------------------------------
procedure TMessage_Form.ServerSocket_ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
showmessage('그와 연결이 안됨');
end;
end.
----------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
[질문]
여기서
// ERR 소켓이 안열림!
procedure TMessage_Form.Btn_IP_Click(Sender: TObject);
var
_PreIP : String;// 이전 ip
begin
try
_PreIP := ClientSocket_.Address;
ClientSocket_.Close;
SendIP := Ed_IP_.Text;
ClientSocket_.Address := SendIP;
ClientSocket_.Open; //<- err
except on Exception do
begin
showmessage('잘못된 Ip Address..');
ClientSocket_.Address:= _PreIP;
end;
end;
end;
부분에 ClientSocket_.Open; 에서 에러가 납니다 도대체 무엇이 잘못된지 모르겠어요;;;;
|