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 이때 위의 에러 발생

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

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



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



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

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

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

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

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

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



3  COMMENTS
  • Profile
    남윤혁 1999.07.19 18:32
    질문입니다.



    DBGrid에서 만약 ID와 NAME이 있다면



    저는 ID는 기존의 값을 그냥 이용하고



    NAME만 바꾸고 싶습니다.



    즉, 등록이 아니고 수정이죠...



    그러니까



    이것을 가능하게 할 수 있는 방법이 없을까요???



    필드단위로 에디트 가능하게 하는 옵션 같은 것 말이죠...



    그럼....



    읽어주셔서 감사합니다.

  • 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;



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



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



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



    류민철.

  • Profile
    유도삼 1999.07.31 05:41
    남윤혁 께서 말씀하시기를...

    > 질문입니다.

    >

    > DBGrid에서 만약 ID와 NAME이 있다면

    >

    > 저는 ID는 기존의 값을 그냥 이용하고

    >

    > NAME만 바꾸고 싶습니다.

    >

    > 즉, 등록이 아니고 수정이죠...

    >

    > 그러니까

    >

    > 이것을 가능하게 할 수 있는 방법이 없을까요???

    >

    > 필드단위로 에디트 가능하게 하는 옵션 같은 것 말이죠...

    >

    > 그럼....

    >

    > 읽어주셔서 감사합니다.



    그리드의 마우스나 키보드 이벤트를 가로채서 특정필드로만 이동하도록

    막아주면 됩니다.

    자세한 것을 원하시면 메일 주세요.



    • 난 나
    • 1999.05.04 10:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.05.05 06:47
      난 나 wrote: > 퀵레포트에서요.. > 선처리를 점선으로 하고 싶거든요.. > > =======================...
    • 문보석
    • 1999.07.19 23:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.07.20 02:52
      VCL은 없구 API로는 구현이 가능합니다. 하지만 만만치 않은 작업이 되겠죠. 참고가 될 API들을 말씀드리...
    • 고혜정
      1999.05.05 03:58
      QRReport를 이용해서 보고서를 만들고 있는데, 자료가 출력될때 5개 나오고 선나오고 그리고 계속해서 이런...
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 강경중
    • 1999.05.05 04:14
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 권도은
      1999.07.19 22:31
      시리얼 통신을 하는 중 CE_OVERRUN 이라는 에러 메세지가 자꾸 뜨면서 통신 불능상태가 되어버리는데 이...
    • 1999.05.05 06:23
      강경중 wrote: > 저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다. > 채팅 클라이언트가 실...
    • 정윤옥
    • 1999.07.19 22:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.07.20 00:31
      정윤옥 께서 말씀하시기를... > 버튼에 클릭이벤트를 강제로 보낼려고 합니다 > sendmessage(button1.Ha...
    • 이상철
    • 1999.05.05 06:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.06 06:10
      이상철 wrote: > 안녕하세요 델파이 를 무지 좋아하는 상철입니당 > 소스는 정확히 몰르구요 하지만 대충...
    • 고혜정
    • 1999.05.05 03:58
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 정호창
      1999.07.19 21:46
      델파이 응용프로그램 실행중 Query, Table의 Data를 dbf로 만들어낼 수 있는지 있다면 방법을 알려주심 고...
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 배재민
    • 1999.05.05 00:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 한재아
      1999.07.19 19:24
      DbGrid상에 ComboBox를 넣어서 데이터를 바꾸어줄 수 있는지 알고싶습니다. 자료를 DbGrid상에서도 바꾸어...
    • 신인재
      1999.05.05 04:36
      아래의 내용을 살펴보니.. try ...finally.. 의 사용에 대해 이해가 조금 부족한듯 싶습니다. finall...
    • 데빠이
      1999.07.19 19:41
      한재아 께서 말씀하시기를... > DbGrid상에 ComboBox를 넣어서 데이터를 바꾸어줄 수 있는지 알고싶습니다...
    • 강경중
    • 1999.05.05 04:14
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 남윤혁
      1999.07.19 18:32
      질문입니다. DBGrid에서 만약 ID와 NAME이 있다면 저는 ID는 기존의 값을 그냥 이용하고 NAME만 ...
    • 1999.05.05 06:23
      강경중 wrote: > 저는 네트웍 체팅 프로르램을 짤려고 하는 초보 델피언 입니다. > 채팅 클라이언트가 실...
    • 유도삼
      1999.07.31 05:41
      남윤혁 께서 말씀하시기를... > 질문입니다. > > DBGrid에서 만약 ID와 NAME이 있다면 > > 저는 ID...
    • 고혜정
      1999.05.05 03:58
      QRReport를 이용해서 보고서를 만들고 있는데, 자료가 출력될때 5개 나오고 선나오고 그리고 계속해서 이런...
    • 신인재
      1999.05.05 05:08
      음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... QRShape를 이용하는 방법인데 이것...
    • 김영해
      1999.05.05 06:34
      신인재 wrote: > 음냐 이것은 약간의 꽁수가 필요하네요...하지만 무지 간단해요... > > QRShape를 이...
    • 김종성
    • 1999.07.19 10:51
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 왕초보
      1999.05.05 01:56
      프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 폼 레벨에서 font를 굴림체로 지정하...
    • 권경부
      1999.07.20 08:35
      아래의 내용만가지고는 어디가 잘못되었는지 알수 없습니다. SaveAsClick 이벤트역시 봐야 하구요... '제...
    • 안치봉
      1999.05.05 02:28
      왕초보 wrote: > 프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 > 폼 레벨에서 fon...
    • 이호선
      1999.05.05 02:24
      안녕하세요. Lightlib상용버전에 대하여 가격이 궁금합니다. 나이렉스가 총판이라 알고 있습니다. Delph...
    • jini
      1999.07.19 18:25
      신은석 께서 말씀하시기를... > 안녕하십니까? 혹시 방법을 알고 계시는 분은 빠른 답변을 주세요. > 보...
    • 이정욱
      1999.05.06 11:46
      LightLib의 Image를 말씀하시는것입니까? 그렇다면 그것보다는 ImageLib를 추천해 드립니다. LightLib의 ...
    • 박홍석
      1999.07.19 08:19
      안녕하세요. 미리보기 화면을 구현하고 있는데 Label에 폰트와 크기를 지정하고 PaintBox에 TextOut을 ...
    • 안치봉
      1999.05.05 02:28
      왕초보 wrote: > 프로젝트를 진행할때 필요에 따라 새로운 폼을 만들고 저의 경우에는 > 폼 레벨에서 fon...
    • 장영철
    • 1999.07.19 04:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 유도삼
      1999.07.31 10:25
      장영철 께서 말씀하시기를... > 며칠을 고민하고 고민하고 했지만 도저히 > 해결못할 문제라 여러 도사...
    • 안치봉
      1999.05.05 01:25
      하윤철 wrote: > 1. Tab control을 올려놓고 폼 색상을 바꾸면... > 텝들의 색상은 따라서 안바뀌고 ...
    • 1999.05.05 01:04
      김지건 wrote: > 프로그램이 실행중에 있을때 TalNet.exe라를 실행화일이 > > 죽는 것을 방지하고 싶...
    • 1999.07.20 00:01
      김창환 께서 말씀하시기를... > 서버 어플리케이션에 Query가 있습니다. > 클라이언트에서 검색하고자 하...