Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[16126] 델파이 Tcp 예제 질문
an [] 1075 읽음    2020-07-21 15:34
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; 에서 에러가 납니다 도대체 무엇이 잘못된지 모르겠어요;;;;

+ -

관련 글 리스트
16126 델파이 Tcp 예제 질문 an 1075 2020/07/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.