Q&A

  • TClientSocket Open시 에러 발생...
저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다.

채팅 클라이언트가 실행시 자기 컴퓨터의 IP Address를 읽어서

TClientSocket의 Address에 그 값을 넣고, TClientSocket를 Open

하여 서버에 접속하려고 합니다.

그래서 IP Address를 구하는 소스를 다운받아 실행 해보니까

IP Address는 정확히 구해지는데 TClientSocket를 Open하니까

에러가 발생합니다.

에러 : reised excption class ESocket Error message

'windows Socket error : (10049) on API 'connect'



IP Address 구하는 함수

function IPGet : String;

var

WSAData : TWSADAta;

HostName, Address : String;

HostEnt : PHostEnt;

begin

WSAStartup(2,WSAData);

SetLength(HostName,255);

Gethostname(PCha(HostName),255);

SetLength(HostName,StrLen(PChar(Hostname)));

HostEnt := Gethostbyname(PChar(HostName));

with HostEnt^ do

Address := Format('%d,%d,%d,%d',[Byte(h_addr^[0])

,[Byte(h_addr^[1])

,[Byte(h_addr^[2])

,[Byte(h_addr^[3])]);

WSACleanup;

Result := Address;

end;

실행 부분

begin

clientsocket.address := IPGet;

clientsocket.open

end;

위에서 clientsocket.open 이때 위의 에러 발생

서버 접속 불가 에러와는 다른 에러인것 같습니다.

어떻게 사용하면 에러가 발생하지 않겠습니까.



그리고 위의 함수에서보면 ^기호가 있는데 이것이 무엇을 뜻하는 것입니까



하나만 더 질문 하겠습니다.

채팅 서버와 클라이언트가 같은 컴퓨터에서 실행되는 것은 자료도 좀 있고

한데 한 컴퓨터에 채팅 서버를 띄우고, 다른 컴퓨터에서 클라이언트를 띄워

서버가 있는 컴퓨터고 접속하여 채팅을 하는 것은 자료를 찾을 수가 없습니다.

고수님들 께서 한수 가르쳐 주십시요,

예제 소스가 있으면 정말 감사하겠습니다.



1  COMMENTS
  • Profile
    1999.05.05 06:23
    강경중 wrote:

    > 저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다.

    > 채팅 클라이언트가 실행시 자기 컴퓨터의 IP Address를 읽어서

    > TClientSocket의 Address에 그 값을 넣고, TClientSocket를 Open

    > 하여 서버에 접속하려고 합니다.

    > 그래서 IP Address를 구하는 소스를 다운받아 실행 해보니까

    > IP Address는 정확히 구해지는데 TClientSocket를 Open하니까

    > 에러가 발생합니다.

    > 에러 : reised excption class ESocket Error message

    > 'windows Socket error : (10049) on API 'connect'

    >

    > IP Address 구하는 함수

    > function IPGet : String;

    > var

    > WSAData : TWSADAta;

    > HostName, Address : String;

    > HostEnt : PHostEnt;

    > begin

    > WSAStartup(2,WSAData);

    > SetLength(HostName,255);

    > Gethostname(PCha(HostName),255);

    > SetLength(HostName,StrLen(PChar(Hostname)));

    > HostEnt := Gethostbyname(PChar(HostName));

    > with HostEnt^ do

    > Address := Format('%d,%d,%d,%d',[Byte(h_addr^[0])

    > ,[Byte(h_addr^[1])

    > ,[Byte(h_addr^[2])

    > ,[Byte(h_addr^[3])]);

    > WSACleanup;

    > Result := Address;

    > end;

    > 실행 부분

    > begin

    > clientsocket.address := IPGet;

    > clientsocket.open

    > end;

    > 위에서 clientsocket.open 이때 위의 에러 발생

    > 서버 접속 불가 에러와는 다른 에러인것 같습니다.

    > 어떻게 사용하면 에러가 발생하지 않겠습니까.

    >

    > 그리고 위의 함수에서보면 ^기호가 있는데 이것이 무엇을 뜻하는 것입니까

    >

    > 하나만 더 질문 하겠습니다.

    > 채팅 서버와 클라이언트가 같은 컴퓨터에서 실행되는 것은 자료도 좀 있고

    > 한데 한 컴퓨터에 채팅 서버를 띄우고, 다른 컴퓨터에서 클라이언트를 띄워

    > 서버가 있는 컴퓨터고 접속하여 채팅을 하는 것은 자료를 찾을 수가 없습니다.

    > 고수님들 께서 한수 가르쳐 주십시요,

    > 예제 소스가 있으면 정말 감사하겠습니다.

    >



    음.... 어디부터 이야기 해야 좋을지....



    먼저 님꼐서 만드시려는 프로그램의 문제부터 말하겠습니다..

    자신의 IP ADDRESS 를 구하셨는데...

    clientsocket.address 는 접속하고자 하는 서버의 IP ADDRESS 를 입력하는 곳입니다.

    즉 SERVERSOCKET 이 구동되어 있는 곳의 IP ADDRESS 를 구해 와야 합니다..

    자신이 서버가 될수는 있겠지만...

    다른 클라이언트가 접속하려면...

    문제가 있겠지요...

    필수적으로 클라이언트 모듈에서는 서버의 IP어드레스를 알아와서 넣어 주기는 힘듭니다..

    INI 파일이나 환경설정 메뉴등을 만들어서 자유롭게 입력하는 것은 가능하겠지만..



    그리고...

    두번째 질문... ^ 는 번지를 가르킵니다..



    그리고 마지막 질문....



    이런식으로 생각을 해보지요...

    먼저 서버 프로그램을 만들어야 겟지요...

    서버에서는 논블럭킹 모드를 사용한다면...



    ONCLIENTREAD 에서 다음과 같은 코드를 입력하여야합니다..

    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

    Socket: TCustomWinSocket);

    var

    i: integer;

    msg:string;

    begin

    msg:=socket.ReceiveText;

    i := 0;

    while true do

    begin

    try

    Serversocket1.Socket.Connections[i].SendText(msg);

    inc(i);

    except

    break;

    end;

    end



    end;



    즉 받아온 데이터를 모든 클라이언트에게 던져 주어야 합니다...



    이정도면 쉽게 프로그램을 하실수 있을거 같은데....



    문제가 있으면 알려주시기 바랍니다...



    류민철.

    • 이정욱
      1999.05.07 16:50
      쩝.. 질문을 이해를 못하겠네요... 조금 더 자세한 질문을 올려주세요. 장영선 wrote: > 지금 제가 ...
    • 김봉재
    • 1999.05.06 19:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.06 19:43
      김봉재 wrote: > 라이브러리를 설치한 순서는 다음과 같습니다... > > 1. RXCTL4.DPK를 읽어서 Compile...
    • 김봉재
      1999.05.06 23:39
      한 wrote: > 김봉재 wrote: > > 라이브러리를 설치한 순서는 다음과 같습니다... > > > > 1. RXCTL4.D...
    • 강동희
    • 1999.05.06 18:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.06 18:48
      컴포넌트 생성시 Create 콘스트럭터에서 AOwner를 이용하시면 됩니다. (AOwner as TForm).Left 와 (AOwner...
    • 이정욱
      1999.05.06 18:40
      나이렉스(http://www.nilex.net)의 팁게시판에 가시면 있습니다. '깜빡'이라는 단어로 검색해 보세요. 보...
    • 이호선
    • 1999.05.06 17:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.06 18:36
      에구.. 죄송하지만 LightLib의 제품군들은 Luxent사에서 이제 더 이상 안나올것이라고 하네요. 즉, 없어진 ...
    • 정인철
      1999.05.06 18:32
      유수 wrote: > 안녕하세요. > > DBGrid에 TQuery(Query1)를 연결 시켜 놨습니다. > > TQuery에는...
    • 유수
      1999.05.07 00:14
      답변 감사합니다. 델파이를 쓴지는 오래되었는데, DB를 시작한지 얼마 되지 않아, 어려움이 많습니다...
    • 안명호
    • 1999.05.06 06:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:32
      안명호 wrote: > 메모 박스에서 상속 받은 컴포넌트엔 Perform 메소드가 > 있는걸로 알고 있습니다. > ...
    • 안명호
    • 1999.05.06 06:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:28
      안명호 wrote: > 리치 에디트 박스의 삽입/수정 상태을 알기 위해서 > 다음과 같은 코딩을 하였습니다. ...
    • sonny7
    • 1999.05.06 04:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:04
      sonny7 wrote: > 기본적으로 델파이 1.0에서는 에디트박스가 좌측정렬만 되고 > > 우측정렬이 Object I...
    • 한만택
    • 1999.05.06 04:40
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 05:58
      한만택 wrote: > 안녕하세요... > 궁금한게 있어서 이렇게 씁니다. > 질문: 도스에 나타난 글은 메모장...
    • 한만택
      1999.05.06 09:27
      소스는 고맙게 받았습니다. 그런데 아직 초보라서 이해가 잘않가는데 실행화일과 소스(화일)를 올려주시...
    • 글쎄요.
      1999.05.06 18:50
      /// 리다이렉트 콤포넌트입니다. 예제도 있구요. 도움이 되시길... 유즈넷에서 퍼 온 것임. PK
    • 글쎄요.
      1999.05.06 18:56
      ZiP파일이 업로드 안 되네요...
    • 김영애
    • 1999.05.06 04:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하윤철
      1999.05.06 18:39
      소계낼때... QRExpr.Expression의 Function 중에 SUM(필드) 쓰셨지요. 그 바로 아래에 Count(필드)가 있습...
    • 정재균
      1999.05.08 01:22
      게임방 관리 프로그램은 일종의 네트워 관리 프로그램과 유사한 형태를 갖습니다. 즉 클라이언트/서버 구...
    • 구창민
      1999.05.06 06:24
      김진영 wrote: > 델파이 공부를 시작 한지 얼마 되지 않았습니다.. > 정말 초보단계에요.. > 그런데 게...
    • Heaven
    • 1999.05.05 13:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:20
      Heaven wrote: > 안녕하세요? > 질문이 있습니다. > > 제가 마스터/디테일 관계의 데이타베이스 프로...
    • 이상철
    • 1999.05.05 06:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:10
      이상철 wrote: > 안녕하세요 델파이 를 무지 좋아하는 상철입니당 > 소스는 정확히 몰르구요 하지만 대충...
    • 강경중
    • 1999.05.05 04:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.05 06:23
      강경중 wrote: > 저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다. > 채팅 클라이언트가 실...
    • 고혜정
    • 1999.05.05 03:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 이호선
    • 1999.05.05 02:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.06 11:46
      LightLib의 Image를 말씀하시는것입니까? 그렇다면 그것보다는 ImageLib를 추천해 드립니다. LightLib의 ...
    • 안치봉
      1999.05.05 02:28
      왕초보 wrote: > 프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 > 폼 레벨에서 fon...
    • 배재민
    • 1999.05.05 00:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.05.05 04:36
      아래의 내용을 살펴보니.. try ...finally.. 의 사용에 대해 이해가 조금 부족한듯 싶습니다. finall...
    • 하윤철
      1999.05.05 00:45
      송수정 wrote: > 델파이 3.0을 쓰고 있습니다. > DB에 있는 내용을 레포트로 출력하고자 할때 > 퀵레...