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.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에 있는 내용을 레포트로 출력하고자 할때 > 퀵레...
    • 안치봉
      1999.05.05 01:25
      하윤철 wrote: > 1. Tab control을 올려놓고 폼 색상을 바꾸면... > 텝들의 색상은 따라서 안바뀌고 ...
    • 1999.05.05 01:04
      김지건 wrote: > 프로그램이 실행중에 있을때 TalNet.exe라를 실행화일이 > > 죽는 것을 방지하고 싶...
    • 한재아
    • 1999.05.04 23:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.06 00:11
      안녕하세요? 음.. 저를 지목하시다니.. 전 사실 DB쪽은 잘 모릅니다. 모.. 시스템도 잘 못하지만.... DbG...
    • 이호선
    • 1999.05.04 21:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.04 22:42
      Word파일을 그림으로 저장하실 수 있으면 가능합니다만, 저희는 그 방법을 모르니 불가능하다고 하겠네요.....
    • 이호선
    • 1999.05.04 20:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.04 21:16
      일단 Text일반문서를 보낼 수 있습니다. 그리고 그냥 BMP나 GIF파일들을 보낼 수 있기때문에 문서를 그림의...
    • 김봉재
    • 1999.05.04 20:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.04 21:15
      김봉재 wrote: > 메모에서 라인마다 다른 색깔을 사용하려 하는데... > 잘 않되는군요... > Memo1.Lines...
    • 김봉재
    • 1999.05.04 20:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.04 21:00
      김봉재 wrote: > OnKeyPress에서는 Shift 키 상태를 볼수가 없고, Key의 자료형은 Char > 입니다. > 그...
    • 이방인
    • 1999.05.04 19:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 1999.05.04 21:15
      이방인 wrote: > 사각형인 이미지를 출력하려 합니다... > 그냥 출력하는 것이 아니라 > 사각 꼭지를 둥...
    • 1999.05.04 21:06
      이방인 wrote: > 사각형인 이미지를 출력하려 합니다... > 그냥 출력하는 것이 아니라 > 사각 꼭지를 둥...
    • 김영옥
    • 1999.05.04 19:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.04 21:22
      김영옥 wrote: > 싱그러운 아침입니다. > 다들 어제의 비가 반가웠겠죠... > 다름 아니라 ... 제가 델파...
    • 1999.05.04 21:20
      김영옥 wrote: > 싱그러운 아침입니다. > 다들 어제의 비가 반가웠겠죠... > 다름 아니라 ... 제가 델파...
    • 고혜정
    • 1999.05.04 18:50
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 신진욱
      1999.07.06 09:05
      고혜정 께서 말씀하시기를... > 다음과 같은 에러가 발생해서 도움을 청하려 합니다. > Error : Cannot ...
    • 1999.05.04 21:17
      고혜정 wrote: > 다음과 같은 에러가 발생해서 도움을 청하려 합니다. > Error : Cannot make a visible...
    • 이정욱
      1999.05.04 21:17
      이미 보여주고 있는 창을 또 ShowModal을 하시려는것 같습니다. 일단 그 폼의 Visible을 False로 주시고 S...
    • 난 나
    • 1999.05.04 10:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.05.05 06:47
      난 나 wrote: > 퀵레포트에서요.. > 선처리를 점선으로 하고 싶거든요.. > > =======================...
    • 김영애
    • 1999.05.04 05:26
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하윤철
      1999.05.04 23:12
      김영애 wrote: > 이것을 함으로써 보고서가 어렵다는 것을 다시한번 느꼈습니다.. > 이것을 테이블 4개를...
    • rain
      1999.05.04 05:34
      저는 그와 같은 상황에서는 일종의 View를 만들어서 해결합니다. 아니면, 폼의 내용과는 상관없는 SQL...