Q&A

  • 인디 소켓 클라이언트쪽에서 readbuff를 사용해서 자료받기..
안녕하세요 언제나 초보 바보감자입니다 꾸벅..ㅠㅅㅠ
흑흑 지금 이거때문에 엄청 고생했는데 방법을 못찾겠습니다..
고수님들의 조언 을 부탁드리겠습니다...
내용은...
인디 서버와 인디 클라이언트가 있는데..
클라에서 서버로 자료를 보내면 잘받습니다..
문제는 다시 서버에서 보내줘야하는데...
보내주는 루틴은 에러가 안나는데...
클라이언트에서 ReadBuffer <-- 요함수만 들어가면 뻑 멈춰버리네요..
데이타 올때까장 기달리는거같은데...
확실하게 몰르겠습니다..소스 첨부하니 부탁바랍니다..


///////////////////////////////////////////////////////////////
//
//클라이언트 부분..
//
///////////////////////////////////////////////////////////////

procedure TForm1.Button1Click(Sender: TObject);
var
bcp: BILL_COM_PACKET;
spp: MacsHeaderPkt;
url: string;
begin
with IdTCPClient1 do
begin
   Connect;
   try
     url := 'http://hanmail.net';

     GetMem(bcp.data_buff, length(url));

     strcopy(@bcp.data_buff, @url);

     bcp.BIL.PacketLength := length(url);

     WriteBuffer(bcp, sizeof(bcp));

//      ReadBuffer(spp.bil, sizeof(spp.bil));  <--문제의부분...ㅡㅡ;;;

   finally

     Disconnect;

   end;

end;

end;

///////////////////////////////////////////////////////////////
//
//서버 부분..
//
///////////////////////////////////////////////////////////////

procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var
bcp: BILL_COM_PACKET;
spp: MacsHeaderPkt;
tmp_buff: string;
begin
with AThread.Connection do
begin
   inc(scount);

   ReadBuffer(bcp.bil, sizeof(bcp.BIL));

   Getmem(bcp.data_buff, bcp.BIL.PacketLength);

   ReadBuffer(bcp.data_buff, sizeof(bcp.BIL.PacketLength));
//받기 끝. 보내기 시작.
   tmp_buff := cp_bil(string(bcp.data_buff));

   GetMem(spp.data_buff, length(tmp_buff));

   strcopy(@spp.data_buff, @tmp_buff);

   spp.bil.uiLen := length(tmp_buff);

//보내기
   WriteBuffer(spp, sizeof(spp));

   scount := scount - 1;

   Disconnect;

end;

end;



ㅠㅅㅠ
긴 소스 읽어주셔서 감사합니다..별로 길진 않지만 ^^;;;
부탁드리겠습니다. 고수님들... 회사에서 오래 못버티겠군요..ㅠㅠ..
2  COMMENTS
  • Profile
    최용일 2002.12.10 03:14
    안녕하세요. 최용일입니다.

    보내는 부분하고 받는 부분하고 다르네요... 그래서 TimeOut걸려서 멈추는거 같군요...

    클라이언트에서 보낼때 bcp를 통째로 보내는데 포인터(bcp.data_buff)가 포함되어 있네요. 아시다시피 포인터는 4바이트자료형입니다. bcp를 보내면 bpc.databuff의 값이 보내지는게 아니라 포인터번지가 보내집니다...

    보낼때는 포인터 번지를 보내고 받을때는 포인터번지가 가리키는 데이터를 받으니 양쪽의 크기가 안맞죠...

    보낼때 아래와 같은 식으로 보내야 될거 같네요...

    WriteBuffer(bcp.bil, sizeof(bcp.BIL));
    ...
    WriteBuffer(bcp.data_buff^, sizeof(bcp.BIL.PacketLength));

    다시 받을때도 마찬가지로 포인터를 보내고 받지 마세요...

    ^^ 항상 즐코하세요...

  • Profile
    장기륜 2002.12.10 03:37
    답변 감사합니다 ^^*
    아직은 안해봤지만.. 그런경우를 생각을 못해보았네요..
    같은 프로세서에서 돌아가니..포인터로 해도 나온다는...
    그래서 잘나오는구나 생각을했는데..^^;;;
    답변 정말 감사합니다..
    예전부터.. 최용일님에게 도움을 받네요 ^^;;;
    감사합니다 꾸벅...



                                      언제나 비를 기다리는 바보감자가 올림...
    • 미러
    • 2002.12.10 06:05
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 남양원
      2002.12.10 12:23
      var   str: string; ...   str := '1000*10asbsdf...';   str := Copy(...
    • 미러
      2002.12.10 18:38
      헉스....제가 잘못 썼군요... interbase에서 stored procedure로 하려고 하거든요.. 10000*10%내역..... ...
    • 열심히
      2002.12.11 00:15
      스토드 프로시져도 마찬가지 아닌가요?? 지금 그줄을 변수에 집어넣고 루핑을 돌리면서 '*' 를 찾는...
    • 김상수
    • 2002.12.10 06:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.11 00:07
      저도 그런적이 있는데 저는 지금 델파이 4쓰거든요??? 더 높은버젼에서도 그런지는 모르겠네요... 전...
    • 김수경
      2002.12.10 07:24
      6번 Line에서 오류가 발생한 것으로 보아 Delphi로 변환할 때 오류가 있지 않았나 생각됩니다. 관련...
    • 김재욱
    • 2002.12.10 06:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.10 08:24
      안녕하세요. 최용일입니다. Rewrite로 파일열어서 저장하시면 됩니다. ^^ 항상 즐코하세요...
    • 김수경
      2002.12.10 07:41
      님이 쓴 글은 어느 Component의 Inerface 부분만 있군요. Component를 설치하신후 예제(더 아래쪽 부분)...
    • 김수경
      2002.12.10 07:32
      죄송! 글이 2번 올라 갔는데 삭제가 안되네요. ㅡㅡ;
    • 조승식
      2002.12.10 07:42
      조언 고맙습니다. 꾸벅...^^ 한번더 찾아 볼랍니다.  근데...델파이 3.0에서는 문제 없이 되...
    • 하기
      2002.12.10 06:56
      꼭 DATE로 비교를 하셔야 하나요? 질문을 보니 Date가 Text로 되어있는것 같은데... 같은 Format형식이면...
    • Wookey
    • 2002.12.10 03:39
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.10 04:06
      select acode, aname, T.a_kum S2, akum From Table1,        &nbs...
    • Wookey
      2002.12.10 18:08
      감사합니다. 질문만 던져 놓고 바쁜일이 있어 감사하다는 답변이 늦었습니다. 그런데요. from 다음의 ac...
    • 열심히
      2002.12.12 22:56
      select B.acode, B.aname, C.a_kum , B.a_kum_now From        &n...
    • Wookey
      2002.12.14 22:07
      감사합니다.  해결되었습니다.
    • 박동호
    • 2002.12.10 03:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김지엽
      2002.12.10 20:18
      어떻게 하면 무한루프 도는 루틴을 찾아낼 수 있나 하는 질문이신가요? 그 유닛이 의심되신다면, 유닛의...
    • 이상협
    • 2002.12.10 02:39
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 호롱불
      2002.12.10 04:13
      1) var getvalue:integer; . . 2) params[2].asinteger:=getvalue; 3) execsql; . . 1번 문장에서...
    • 이상협
      2002.12.10 04:48
      공부하던 source 올립니다. test해 보시고 어느부분이 잘못되었는지 좀 부탁드립니다.
    • 이상협
      2002.12.10 04:30
      getvlaue:integer; 이거 error 나서 제가 그냥 만든거거든요 비슷한 맥락으로 아래 프로그램 error 안나게...
    • 열심히
      2002.12.10 03:34
      스텝을 밟아서 어디인지 알려주심 고마울텐데.. 그리고 너무짧은데염..더 필요한데염.. 소스안에 getva...
    • 이상협
      2002.12.10 03:57
      있잖아요 위의 4번째 줄에서 에라나요 아마도 그내용을 입력하지 못하나본데요 userid &nbs...
    • 열심히
      2002.12.10 04:15
      님이 지금 쓰신 dm에 있는 Qryupdate있지 않습니까.. 이TQuery에 필드가 올려져 있는지 봐주실래요.. 올...
    • 김용섭
    • 2002.12.10 02:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.10 08:25
      안녕하세요. 최용일입니다. 팁이나 질답게시판에서 근접검색으로 찾아보시면 답이 있을겁니다... ^^ ...
    • 이상협
    • 2002.12.10 02:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이상로
      2002.12.13 21:27
      델파이의 Demo를 보면 확인 가능 하십니다... Query의 properties에 보면 SQL이라는게 있습니다.. 그곳...
    • 열심히
      2002.12.10 04:09
      헉 그런 내용은 아무책이나 뒤져봐도 나올텐데... BDE설정 되있으면 방법은 비슷하지 않나요??비슷 할텐...
    • 장기륜
    • 2002.12.10 01:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.10 03:14
      안녕하세요. 최용일입니다. 보내는 부분하고 받는 부분하고 다르네요... 그래서 TimeOut걸려서 멈추는거...
    • 장기륜
      2002.12.10 03:37
      답변 감사합니다 ^^* 아직은 안해봤지만.. 그런경우를 생각을 못해보았네요.. 같은 프로세서에서 돌아가...
    • 김계환
    • 2002.12.10 01:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 길병욱
    • 2002.12.10 00:33
    • 3 COMMENTS
    • /
    • 0 LIKES
    • LuckyBoy
      2002.12.10 01:13
      각 값뒤에 #13값을 넣어보세요.. 예를들어 sCode := sCode + #13; 이렇게 넣으면 Enter 값이 들어갑니...
    • 길병욱
      2002.12.10 03:04
      위의 답변데로 했느데요..확인해보니 엔터는 아니구 이상한기호(노래음표)만 들어가 있더라구요.. 암튼 ...
    • 최용일
      2002.12.10 03:32
      안녕하세요. 최용일입니다. #13대신에 #13#10을 넣어보세요... ^^ 항상 즐코하세요...
    • 김재환
    • 2002.12.10 00:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김지엽
      2002.12.10 01:35
      45만건의 레코드라면, mdb로서는 한계에 닿았다고 볼 수 있지 않나 싶네요. RDB에서야 인덱스를 이용하...
    • 김재환
      2002.12.10 02:23
    • ㉿ 이영범
      2002.12.10 00:55
      XL.Range['A:D'].NumberFormat   := '@';   --> 문자형 XL.Range['G:H'].NumberFo...
    • Inoak
    • 2002.12.09 23:01
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김해우
      2002.12.10 01:24
      이렇게 사용하시면 됩니다.. 두움말 참조하시면 되구요. var    F : Extended; begin &n...
    • 머슴
      2002.12.09 23:55
        FormatFloat라는 함수가 있습니다..   형식은  아래와 같고요 반환값...
    • 최용일
      2002.12.10 03:31
      안녕하세요. 최용일입니다. 그 프로그램을 ActiveX로 만드시면 웹브라우저에서도 볼 수 있습니다... ...
    • 도니
    • 2002.12.09 20:47
    • 0 COMMENTS
    • /
    • 0 LIKES