Q&A

  • 이미지 전송? (타락천사님께)
도망가지 마시고 무식한 저를 어여삐 여겨 다음 문제의 해결책을 알려주세요 ㅜ.ㅠ

알려주신데로 코딩했는데 이미지가 안뿌려져여~



--클라이언트에서 다음과 같이 이미지를 전송했습니다.

var

ms : TMemoryStream;

szBuf : array[0..3000] of char;

begin

ms := TMemoryStream.Create;

ms.LoadFromFile('screen.bmp');

ms.Write(szBuf,0);

Image1.Picture.Bitmap.LoadFromStream(ms);

ClientSocket1.Socket.SendBuf(szBuf,0);

end;



--서버에서 다음과 같이 이미지를 받았습니다

var

ms : TMemoryStream;

szBuf : array[0..3000] of char;

begin

ms := TMemoryStream.Create;

ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

ms.Read(szBuf,sizeof(szBuf));

Image1.Picture.Bitmap.LoadFromStream(ms);

Image1.Refresh();

end;



마지막으로 소켓 프로그래밍에 관한 좋은 책있으면 소개해주세요 ~



6  COMMENTS
  • Profile
    유승우 2000.09.29 07:07
    예전에 테스트를 한적이 있었는데...

    오류코드를 내뿜는 경우는 이미지를 한번에 보내는 데는 한계가 있습니다.

    정확히 사이즈는 기억이 안나지만 Stream 구조체를 잘라서 보내야 하는 걸로

    기억 하는군요..

    이거 테스트 한게..3년전인가?

    코드는 맞는거 같은데..



    심은진 wrote:

    > 도망가지 마시고 무식한 저를 어여삐 여겨 다음 문제의 해결책을 알려주세요 ㅜ.ㅠ

    > 알려주신데로 코딩했는데 이미지가 안뿌려져여~

    >

    > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > var

    > ms : TMemoryStream;

    > szBuf : array[0..3000] of char;

    > begin

    > ms := TMemoryStream.Create;

    > ms.LoadFromFile('screen.bmp');

    > ms.Write(szBuf,0);

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > ClientSocket1.Socket.SendBuf(szBuf,0);

    > end;

    >

    > --서버에서 다음과 같이 이미지를 받았습니다

    > var

    > ms : TMemoryStream;

    > szBuf : array[0..3000] of char;

    > begin

    > ms := TMemoryStream.Create;

    > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > ms.Read(szBuf,sizeof(szBuf));

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > Image1.Refresh();

    > end;

    >

    > 마지막으로 소켓 프로그래밍에 관한 좋은 책있으면 소개해주세요 ~

    >

  • Profile
    돌머리 2000.09.20 05:30
    안녕하세요 김동원입니다.

    타락천사님은 아니지만 잘못된곳이 보여서요.

    소스를 살펴보니 수정해야 할곳이 몇군데

    보이는군요...

    우선 클라이언트에서 SendBuf함수를 보면

    두개의 파라메타가 있지요,

    앞의것은 실제 보내는 데이터이고

    뒤의 것은 보내는 데이터의 크기입니다...

    소스에서 실수하신것이 후자 입니다...

    0을 넣으시면 보내는 자료가 없다는 뜻이 되지요..

    그러니까 거기에 0 대신 sizeof(szBuf)를

    넣어야 할것 같군요.. 그래야 받는 쪽에서도

    받아야할 데이터의 크기를 알수가 있거든요.

    그리고...

    서버쪽에서도 변수의 크기를 넣는것이 아니라

    클라이언트에서 보낸 자료의 크기를 넣어야

    합니다.

    ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    =>

    tempsize := ServerSocket1.Socket.ReceiveLength();

    ServerSocket1.Socket.ReceiveBuf(szBuf,tempsize);



    제기억이 맞는다면 첫버째 파라메터값이 var형으로 되어

    있는 것으로 알고 있습니다...

    일단 프로그램을 수정해 봅니다.



    --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    var

    ms : TMemoryStream;

    tempsize : integer;

    begin

    ms := TMemoryStream.Create;

    ms.LoadFromFile('screen.bmp');

    Image1.Picture.Bitmap.LoadFromStream(ms);

    tempsize:= sizeof(ms);

    ClientSocket1.Socket.SendBuf(ms,tempsize);

    end;



    --서버에서 다음과 같이 이미지를 받았습니다

    var

    ms : TMemoryStream;

    tempsize : integer;

    begin

    ms := TMemoryStream.Create;

    tempsize := ServerSocket1.Socket.ReceiveLength();

    ServerSocket1.Socket.ReceiveBuf(ms,tempsize);

    image1.Picture.Bitmap.LoadFromStream(ms);

    image1.Refresh();

    end;



    즐거운날 되세요....









    심은진 wrote:

    > 도망가지 마시고 무식한 저를 어여삐 여겨 다음 문제의 해결책을 알려주세요 ㅜ.ㅠ

    > 알려주신데로 코딩했는데 이미지가 안뿌려져여~

    >

    > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > var

    > ms : TMemoryStream;

    > szBuf : array[0..3000] of char;

    > begin

    > ms := TMemoryStream.Create;

    > ms.LoadFromFile('screen.bmp');

    > ms.Write(szBuf,0);

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > ClientSocket1.Socket.SendBuf(szBuf,0);

    > end;

    >

    > --서버에서 다음과 같이 이미지를 받았습니다

    > var

    > ms : TMemoryStream;

    > szBuf : array[0..3000] of char;

    > begin

    > ms := TMemoryStream.Create;

    > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > ms.Read(szBuf,sizeof(szBuf));

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > Image1.Refresh();

    > end;

    >

    > 마지막으로 소켓 프로그래밍에 관한 좋은 책있으면 소개해주세요 ~

    >

  • Profile
    심은진 2000.09.20 06:14
    알려주신데루 수정한후 실행 해보니..



    다음과 같은 에러가 뜨네여

    클라이언트 -> 소켓 에러 10054

    서버 -> 소켓 에러 10057



    무슨 에러인지 어떻게 확인하죠 ..



    계속 된 질문으로 게시판을 어지럽히면서 느낀건데..

    전 정말 무식한가 봐요 ㅜ.ㅠ



    돌머리 wrote:

    > 안녕하세요 김동원입니다.

    > 타락천사님은 아니지만 잘못된곳이 보여서요.

    > 소스를 살펴보니 수정해야 할곳이 몇군데

    > 보이는군요...

    > 우선 클라이언트에서 SendBuf함수를 보면

    > 두개의 파라메타가 있지요,

    > 앞의것은 실제 보내는 데이터이고

    > 뒤의 것은 보내는 데이터의 크기입니다...

    > 소스에서 실수하신것이 후자 입니다...

    > 0을 넣으시면 보내는 자료가 없다는 뜻이 되지요..

    > 그러니까 거기에 0 대신 sizeof(szBuf)를

    > 넣어야 할것 같군요.. 그래야 받는 쪽에서도

    > 받아야할 데이터의 크기를 알수가 있거든요.

    > 그리고...

    > 서버쪽에서도 변수의 크기를 넣는것이 아니라

    > 클라이언트에서 보낸 자료의 크기를 넣어야

    > 합니다.

    > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > =>

    > tempsize := ServerSocket1.Socket.ReceiveLength();

    > ServerSocket1.Socket.ReceiveBuf(szBuf,tempsize);

    >

    > 제기억이 맞는다면 첫버째 파라메터값이 var형으로 되어

    > 있는 것으로 알고 있습니다...

    > 일단 프로그램을 수정해 봅니다.

    >

    > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > var

    > ms : TMemoryStream;

    > tempsize : integer;

    > begin

    > ms := TMemoryStream.Create;

    > ms.LoadFromFile('screen.bmp');

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > tempsize:= sizeof(ms);

    > ClientSocket1.Socket.SendBuf(ms,tempsize);

    > end;

    >

    > --서버에서 다음과 같이 이미지를 받았습니다

    > var

    > ms : TMemoryStream;

    > tempsize : integer;

    > begin

    > ms := TMemoryStream.Create;

    > tempsize := ServerSocket1.Socket.ReceiveLength();

    > ServerSocket1.Socket.ReceiveBuf(ms,tempsize);

    > image1.Picture.Bitmap.LoadFromStream(ms);

    > image1.Refresh();

    > end;

    >

    > 즐거운날 되세요....

    >

    >

    >

    >

    > 심은진 wrote:

    > > 도망가지 마시고 무식한 저를 어여삐 여겨 다음 문제의 해결책을 알려주세요 ㅜ.ㅠ

    > > 알려주신데로 코딩했는데 이미지가 안뿌려져여~

    > >

    > > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > > var

    > > ms : TMemoryStream;

    > > szBuf : array[0..3000] of char;

    > > begin

    > > ms := TMemoryStream.Create;

    > > ms.LoadFromFile('screen.bmp');

    > > ms.Write(szBuf,0);

    > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > ClientSocket1.Socket.SendBuf(szBuf,0);

    > > end;

    > >

    > > --서버에서 다음과 같이 이미지를 받았습니다

    > > var

    > > ms : TMemoryStream;

    > > szBuf : array[0..3000] of char;

    > > begin

    > > ms := TMemoryStream.Create;

    > > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > > ms.Read(szBuf,sizeof(szBuf));

    > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > Image1.Refresh();

    > > end;

    > >

    > > 마지막으로 소켓 프로그래밍에 관한 좋은 책있으면 소개해주세요 ~

    > >

  • Profile
    돌머리 2000.09.20 08:47
    심은진 wrote:

    > 알려주신데루 수정한후 실행 해보니..

    >

    > 다음과 같은 에러가 뜨네여

    > 클라이언트 -> 소켓 에러 10054

    > 서버 -> 소켓 에러 10057

    >

    > 무슨 에러인지 어떻게 확인하죠 ..

    >

    > 계속 된 질문으로 게시판을 어지럽히면서 느낀건데..

    > 전 정말 무식한가 봐요 ㅜ.ㅠ

    >



    안녕하세요..김동원입니다...

    그 에러는 소켓을 접속하지 안았거나

    접속할수 없다는 에러 입니다.

    아래에 에러 메세지를 정리해서 올립니다.

    10004 (WSAEINTR) [10004] Interrupted system call.

    10009 (WSAEBADF) [10009] Bad file number.

    10013 (WSAEACCES) [10013] Access denied.

    10014 (WSAEFAULT) [10014] Bad address.

    10022 (WSAEINVAL) [10022] Invalid argument.

    10024 (WSAEMFILE) [10024] Too many open files.

    10035 (WSAEWOULDBLOCK) [10035] Operation would block. Check also the DataToSend property of the component (if any).

    10036 (WSAEINPROGRESS) [10036] Operation now in progress.

    10037 (WSAEALREADY) [10037] Operation already in progress.

    10038 (WSAENOTSOCK) [10038] Socket operation on non-socket.

    10039 (WSAEDESTADDRREQ) [10039] Destination address required.

    10040 (WSAEMSGSIZE) [10040] Message too long.

    10041 (WSAEPROTOTYPE) [10041] Protocol wrong type for socket.

    10042 (WSAENOPROTOOPT) [10042] Bad protocol option.

    10043 (WSAEPROTONOSUPPORT) [10043] Protocol not supported.

    10044 (WSAESOCKTNOSUPPORT) [10044] Socket type not supported.

    10045 (WSAEOPNOTSUPP) [10045] Operation not supported on socket.

    10046 (WSAEPFNOSUPPORT) [10046] Protocol family not supported.

    10047 (WSAEAFNOSUPPORT) [10047] Address family not supported by protocol family.

    10048 (WSAEADDRINUSE) [10048] Address already in use.

    10049 (WSAEADDRNOTAVAIL) [10049] Can't assign requested address.

    10050 (WSAENETDOWN) [10050] Network is down.

    10051 (WSAENETUNREACH) [10051] Network is unreachable.

    10052 (WSAENETRESET) [10052] Net dropped connection or reset.

    10053 (WSAECONNABORTED) [10053] Software caused connection abort.

    10054 (WSAECONNRESET) [10054] Connection reset by peer.

    10055 (WSAENOBUFS) [10055] No buffer space available.

    10056 (WSAEISCONN) [10056] Socket is already connected.

    10057 (WSAENOTCONN) [10057] Socket is not connected.

    10058 (WSAESHUTDOWN) [10058] Can't send after socket shutdown.

    10059 (WSAETOOMANYREFS) [10059] Too many references, can't splice.

    10060 (WSAETIMEDOUT) [10060] Connection timed out.

    10061 (WSAECONNREFUSED) [10061] Connection refused.

    10062 (WSAELOOP) [10062] Too many levels of symbolic links.

    10063 (WSAENAMETOOLONG) [10063] File name too long.

    10064 (WSAEHOSTDOWN) [10064] Host is down.

    10065 (WSAEHOSTUNREACH) [10065] No route to host.

    10066 (WSAENOTEMPTY) [10066] Directory not empty

    10067 (WSAEPROCLIM) [10067] Too many processes.

    10068 (WSAEUSERS) [10068] Too many users.

    10069 (WSAEDQUOT) [10069] Disc Quota Exceeded.

    10070 (WSAESTALE) [10070] Stale NFS file handle.

    10071 (WSAEREMOTE) [10071] Too many levels of remote in path.

    10072 (WSASYSNOTREADY) [10091] Network subsystem is unavailable.

    10073 (WSAVERNOTSUPPORTED) [10092] WINSOCK DLL Version out of range.

    10074 (WSANOTINITIALISED) [10093] Winsock not loaded yet.

    11001 (WSAHOST_NOT_FOUND) [11001] Host not found.

    11002 (WSATRY_AGAIN) [11002] Non-authoritative 'Host not found' (try again or check DNS setup).

    11003 (WSANO_RECOVERY) [11003] Non-recoverable errors: FORMERR, REFUSED, NOTIMP.

    11004 (WSANO_DATA) [11004] Valid name, no data record (check DNS setup).

    도움이 되시길 바랍니다....

  • Profile
    김진호 2000.09.20 07:57
    심은진 wrote:

    > 알려주신데루 수정한후 실행 해보니..

    >

    > 다음과 같은 에러가 뜨네여

    > 클라이언트 -> 소켓 에러 10054

    > 서버 -> 소켓 에러 10057

    >

    > 무슨 에러인지 어떻게 확인하죠 ..

    >

    > 계속 된 질문으로 게시판을 어지럽히면서 느낀건데..

    > 전 정말 무식한가 봐요 ㅜ.ㅠ

    >

    > 돌머리 wrote:

    > > 안녕하세요 김동원입니다.

    > > 타락천사님은 아니지만 잘못된곳이 보여서요.

    > > 소스를 살펴보니 수정해야 할곳이 몇군데

    > > 보이는군요...

    > > 우선 클라이언트에서 SendBuf함수를 보면

    > > 두개의 파라메타가 있지요,

    > > 앞의것은 실제 보내는 데이터이고

    > > 뒤의 것은 보내는 데이터의 크기입니다...

    > > 소스에서 실수하신것이 후자 입니다...

    > > 0을 넣으시면 보내는 자료가 없다는 뜻이 되지요..

    > > 그러니까 거기에 0 대신 sizeof(szBuf)를

    > > 넣어야 할것 같군요.. 그래야 받는 쪽에서도

    > > 받아야할 데이터의 크기를 알수가 있거든요.

    > > 그리고...

    > > 서버쪽에서도 변수의 크기를 넣는것이 아니라

    > > 클라이언트에서 보낸 자료의 크기를 넣어야

    > > 합니다.

    > > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > > =>

    > > tempsize := ServerSocket1.Socket.ReceiveLength();

    > > ServerSocket1.Socket.ReceiveBuf(szBuf,tempsize);

    > >

    > > 제기억이 맞는다면 첫버째 파라메터값이 var형으로 되어

    > > 있는 것으로 알고 있습니다...

    > > 일단 프로그램을 수정해 봅니다.

    > >

    > > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > > var

    > > ms : TMemoryStream;

    > > tempsize : integer;

    > > begin

    > > ms := TMemoryStream.Create;

    > > ms.LoadFromFile('screen.bmp');

    > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > tempsize:= sizeof(ms);

    > > ClientSocket1.Socket.SendBuf(ms,tempsize);

    > > end;

    > >

    > > --서버에서 다음과 같이 이미지를 받았습니다

    > > var

    > > ms : TMemoryStream;

    > > tempsize : integer;

    > > begin

    > > ms := TMemoryStream.Create;

    > > tempsize := ServerSocket1.Socket.ReceiveLength();

    > > ServerSocket1.Socket.ReceiveBuf(ms,tempsize);

    > > image1.Picture.Bitmap.LoadFromStream(ms);

    > > image1.Refresh();

    > > end;

    > >

    > > 즐거운날 되세요....

    > >

    > >

    > >

    > >

    > > 심은진 wrote:

    > > > 도망가지 마시고 무식한 저를 어여삐 여겨 다음 문제의 해결책을 알려주세요 ㅜ.ㅠ

    > > > 알려주신데로 코딩했는데 이미지가 안뿌려져여~

    > > >

    > > > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > > > var

    > > > ms : TMemoryStream;

    > > > szBuf : array[0..3000] of char;

    > > > begin

    > > > ms := TMemoryStream.Create;

    > > > ms.LoadFromFile('screen.bmp');

    > > > ms.Write(szBuf,0);

    > > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > > ClientSocket1.Socket.SendBuf(szBuf,0);

    > > > end;

    > > >

    > > > --서버에서 다음과 같이 이미지를 받았습니다

    > > > var

    > > > ms : TMemoryStream;

    > > > szBuf : array[0..3000] of char;

    > > > begin

    > > > ms := TMemoryStream.Create;

    > > > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > > > ms.Read(szBuf,sizeof(szBuf));

    > > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > > Image1.Refresh();

    > > > end;

    > > >

    > > > 마지막으로 소켓 프로그래밍에 관한 좋은 책있으면 소개해주세요 ~

    > > >



    제가 해보니깐 정말 잘되는 군여..

    님이 뭔가 실수 하신거 같은데..

    포트번호는 클,과 서버가 같아야 해요..틀리면 못찾죠..



    제가 해본 소스를 같이 올립니다,.,



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ScktComp, ExtCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    ServerSocket1: TServerSocket;

    ClientSocket1: TClientSocket;

    Image1: TImage;

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure ServerSocket1ClientRead(Sender: TObject;

    Socket: TCustomWinSocket);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}





    procedure TForm1.FormCreate(Sender: TObject);

    begin

    ServerSocket1.Active := True;

    ClientSocket1.Active := True;



    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    ms : TMemoryStream;

    szBuf : array[0..3000] of char;

    begin

    ms := TMemoryStream.Create;

    ms.LoadFromFile('c:aa.bmp');

    ms.Write(szBuf,0);

    Image1.Picture.Bitmap.LoadFromStream(ms);

    // ClientSocket1.Socket.SendStream(ms);

    ClientSocket1.Socket.SendBuf(szBuf,0);

    end;



    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

    Socket: TCustomWinSocket);

    var

    ms : TMemoryStream;

    szBuf : array[0..3000] of char;

    begin

    ms := TMemoryStream.Create;

    Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    ms.Read(szBuf,sizeof(szBuf));

    Image1.Picture.Bitmap.LoadFromStream(ms);

    Image1.Refresh();

    end;



    end.

  • Profile
    심은진 2000.09.21 05:35
    클라이언트 소켓과 서버 소켓을 한폼안에 놓는다면

    소켓을 사용할 필요가 없겠죠?

    원격지 엑세스가 필요한건데...



    암튼 안되요.. 이번 프로젝트는 포기하렵니다..



    김진호 wrote:

    > 심은진 wrote:

    > > 알려주신데루 수정한후 실행 해보니..

    > >

    > > 다음과 같은 에러가 뜨네여

    > > 클라이언트 -> 소켓 에러 10054

    > > 서버 -> 소켓 에러 10057

    > >

    > > 무슨 에러인지 어떻게 확인하죠 ..

    > >

    > > 계속 된 질문으로 게시판을 어지럽히면서 느낀건데..

    > > 전 정말 무식한가 봐요 ㅜ.ㅠ

    > >

    > > 돌머리 wrote:

    > > > 안녕하세요 김동원입니다.

    > > > 타락천사님은 아니지만 잘못된곳이 보여서요.

    > > > 소스를 살펴보니 수정해야 할곳이 몇군데

    > > > 보이는군요...

    > > > 우선 클라이언트에서 SendBuf함수를 보면

    > > > 두개의 파라메타가 있지요,

    > > > 앞의것은 실제 보내는 데이터이고

    > > > 뒤의 것은 보내는 데이터의 크기입니다...

    > > > 소스에서 실수하신것이 후자 입니다...

    > > > 0을 넣으시면 보내는 자료가 없다는 뜻이 되지요..

    > > > 그러니까 거기에 0 대신 sizeof(szBuf)를

    > > > 넣어야 할것 같군요.. 그래야 받는 쪽에서도

    > > > 받아야할 데이터의 크기를 알수가 있거든요.

    > > > 그리고...

    > > > 서버쪽에서도 변수의 크기를 넣는것이 아니라

    > > > 클라이언트에서 보낸 자료의 크기를 넣어야

    > > > 합니다.

    > > > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > > > =>

    > > > tempsize := ServerSocket1.Socket.ReceiveLength();

    > > > ServerSocket1.Socket.ReceiveBuf(szBuf,tempsize);

    > > >

    > > > 제기억이 맞는다면 첫버째 파라메터값이 var형으로 되어

    > > > 있는 것으로 알고 있습니다...

    > > > 일단 프로그램을 수정해 봅니다.

    > > >

    > > > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > > > var

    > > > ms : TMemoryStream;

    > > > tempsize : integer;

    > > > begin

    > > > ms := TMemoryStream.Create;

    > > > ms.LoadFromFile('screen.bmp');

    > > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > > tempsize:= sizeof(ms);

    > > > ClientSocket1.Socket.SendBuf(ms,tempsize);

    > > > end;

    > > >

    > > > --서버에서 다음과 같이 이미지를 받았습니다

    > > > var

    > > > ms : TMemoryStream;

    > > > tempsize : integer;

    > > > begin

    > > > ms := TMemoryStream.Create;

    > > > tempsize := ServerSocket1.Socket.ReceiveLength();

    > > > ServerSocket1.Socket.ReceiveBuf(ms,tempsize);

    > > > image1.Picture.Bitmap.LoadFromStream(ms);

    > > > image1.Refresh();

    > > > end;

    > > >

    > > > 즐거운날 되세요....

    > > >

    > > >

    > > >

    > > >

    > > > 심은진 wrote:

    > > > > 도망가지 마시고 무식한 저를 어여삐 여겨 다음 문제의 해결책을 알려주세요 ㅜ.ㅠ

    > > > > 알려주신데로 코딩했는데 이미지가 안뿌려져여~

    > > > >

    > > > > --클라이언트에서 다음과 같이 이미지를 전송했습니다.

    > > > > var

    > > > > ms : TMemoryStream;

    > > > > szBuf : array[0..3000] of char;

    > > > > begin

    > > > > ms := TMemoryStream.Create;

    > > > > ms.LoadFromFile('screen.bmp');

    > > > > ms.Write(szBuf,0);

    > > > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > > > ClientSocket1.Socket.SendBuf(szBuf,0);

    > > > > end;

    > > > >

    > > > > --서버에서 다음과 같이 이미지를 받았습니다

    > > > > var

    > > > > ms : TMemoryStream;

    > > > > szBuf : array[0..3000] of char;

    > > > > begin

    > > > > ms := TMemoryStream.Create;

    > > > > ServerSocket1.Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > > > > ms.Read(szBuf,sizeof(szBuf));

    > > > > Image1.Picture.Bitmap.LoadFromStream(ms);

    > > > > Image1.Refresh();

    > > > > end;

    > > > >

    > > > > 마지막으로 소켓 프로그래밍에 관한 좋은 책있으면 소개해주세요 ~

    > > > >

    >

    > 제가 해보니깐 정말 잘되는 군여..

    > 님이 뭔가 실수 하신거 같은데..

    > 포트번호는 클,과 서버가 같아야 해요..틀리면 못찾죠..

    >

    > 제가 해본 소스를 같이 올립니다,.,

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, ScktComp, ExtCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > ServerSocket1: TServerSocket;

    > ClientSocket1: TClientSocket;

    > Image1: TImage;

    > procedure FormCreate(Sender: TObject);

    > procedure Button1Click(Sender: TObject);

    > procedure ServerSocket1ClientRead(Sender: TObject;

    > Socket: TCustomWinSocket);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > ServerSocket1.Active := True;

    > ClientSocket1.Active := True;

    >

    > end;

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > ms : TMemoryStream;

    > szBuf : array[0..3000] of char;

    > begin

    > ms := TMemoryStream.Create;

    > ms.LoadFromFile('c:aa.bmp');

    > ms.Write(szBuf,0);

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > // ClientSocket1.Socket.SendStream(ms);

    > ClientSocket1.Socket.SendBuf(szBuf,0);

    > end;

    >

    > procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

    > Socket: TCustomWinSocket);

    > var

    > ms : TMemoryStream;

    > szBuf : array[0..3000] of char;

    > begin

    > ms := TMemoryStream.Create;

    > Socket.ReceiveBuf(szBuf,sizeof(szBuf));

    > ms.Read(szBuf,sizeof(szBuf));

    > Image1.Picture.Bitmap.LoadFromStream(ms);

    > Image1.Refresh();

    > end;

    >

    > end.

    • 심은진
    • 2000.09.20 03:29
    • 6 COMMENTS
    • /
    • 1 LIKES
    • 유승우
      2000.09.29 07:07
      예전에 테스트를 한적이 있었는데... 오류코드를 내뿜는 경우는 이미지를 한번에 보내는 데는 한계가 있습...
    • 돌머리
      2000.09.20 05:30
      안녕하세요 김동원입니다. 타락천사님은 아니지만 잘못된곳이 보여서요. 소스를 살펴보니 수정해야 할곳...
    • 심은진
      2000.09.20 06:14
      알려주신데루 수정한후 실행 해보니.. 다음과 같은 에러가 뜨네여 클라이언트 -> 소켓 에러 10054 서...
    • 돌머리
      2000.09.20 08:47
      심은진 wrote: > 알려주신데루 수정한후 실행 해보니.. > > 다음과 같은 에러가 뜨네여 > 클라이언트...
    • 김진호
      2000.09.20 07:57
      심은진 wrote: > 알려주신데루 수정한후 실행 해보니.. > > 다음과 같은 에러가 뜨네여 > 클라이언트...
    • 심은진
      2000.09.21 05:35
      클라이언트 소켓과 서버 소켓을 한폼안에 놓는다면 소켓을 사용할 필요가 없겠죠? 원격지 엑세스가 필요...
    • 이상국
      2000.09.25 23:43
      > typedef struct tagRECIPINFO > { > char strNo[32]; > char strName[32]; > char strCompany[64]...
    • 최용일
      2000.09.20 03:34
      안녕하세요. 델파이세상(http://www.freechal.com/delphiworld)의 최용일입니다. 이건 수없이 많은 질답...
    • 돌머리
      2000.09.20 03:29
      안녕하세요 김도원입니다... 말씀하신대로 하시면 될것 같네요... var edTemp : Array[1..n] of TE...
    • 심동훈
    • 2000.09.20 02:51
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박병희
      2000.09.21 03:20
      심동훈 wrote: > 현나영 wrote: > > BDE에서 oracle을 연결하려고 하는데,계속 에러가 뜹니다. > > OS는...
    • 심동훈
      2000.09.21 06:36
      박병희 wrote: > 심동훈 wrote: > > 현나영 wrote: > > > BDE에서 oracle을 연결하려고 하는데,계속 에...
    • 박병희
      2000.09.21 19:04
      심동훈 wrote: > 박병희 wrote: > > 심동훈 wrote: > > > 현나영 wrote: > > > > BDE에서 oracle을 연...
    • 성더기
      2000.09.22 22:30
      vendor initialization failed --> 이에러는 동훈님 말씀처럼 oraclebin폴더가 path에 안잡혀 있거나 d...
    • 최용일
      2000.09.20 02:35
      먼저 검색해보세요... 무지 많이 답변되어 있는건데... WM_CLOSE메세지를 보내면 됩니다. SendMessag...
    • 박종만
      2000.09.20 03:31
      저기요... 안 돼는 데요... on create() 상황에서는 마찬가지로 무시하고 씩씩하게 다음 일을 하더라구요...
    • 심동훈
      2000.09.20 03:45
      안녕하세요? 델파이세상(http://www.freechal.com/delphiworld)의 심동훈입니다. 이렇게 한번 해보세요...
    • 최용일
      2000.09.20 03:38
      헐~ PostMessage(Handle, WM_CLOSE, 0, 0); 이렇게 해보세요... Exit를 사용하셔두 되구요... if...
    • 방경주
    • 2000.09.20 02:30
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 돌머리
      2000.09.20 03:21
      안녕하세요 김동원입니다. StrtoDateTime 의 파라메터 형식이 틀려서 그럴것입니다. 제가 알기론 형식...
    • 방경주
      2000.09.20 22:50
      음...그게 형식이 틀려서 났던 에러더군여...ㅠㅠ 그래서 걍 펑션을 만들기두 뭐해서 select할때 date ...
    • 최용일
      2000.09.20 02:30
      안녕하세요. 최용일입니다. Call by value로 파라매터를 참조한다면 함수 내부에서 바꾼 값은 함수 바깥...
    • kylix
      2000.09.20 02:23
      Float나 Number의 자릿수를 어디에서 정의하셨습니까??? 것참 궁금하군요... 돌머리 wrote: > 제가 필...
    • 돌머리
      2000.09.20 03:01
      안녕하세요.. 돌머리 김동원입니다. 우선 관심을 가져 주셔서 감사합니다. 제가 원하는 값은 다른게 아니...
    • kylix
      2000.09.20 03:17
      dBase를 쓰나요??? 패러독스,MDB 같은거에는 그런게 없는데... 돌머리 wrote: > 안녕하세요.. 돌머...
    • 돌머리
      2000.09.20 04:52
      에구 제가 중요한것을 빼먹었군요.. 모든 데이터베이스를 다 사용합니다... 다른 DataBases는 어짜피 자...
    • 초보자
    • 2000.09.20 01:36
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.09.20 01:44
    • 초보자
      2000.09.20 02:36
    • 최용일
      2000.09.20 02:40
    • 초보자
      2000.09.20 02:56
    • 심동훈
      2000.09.20 03:19
    • 초보자
      2000.09.20 04:11
    • 최용일
      2000.09.20 03:18
    • 초초보
    • 2000.09.20 01:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 돌머리
      2000.09.20 01:49
      안녕하세요..김동원입니다. Telnet을 사용하시는가 보죠? 저같은 경우에는 데이터 송수신량이 많아서 ...
    • 초초보
      2000.09.20 03:02
      답변 감사합니다. 그런데 그렇게 할경우 속도는 어떻습니까? 실시간으로 디비에서 쿼리를 해서 뿌려...
    • 돌머리
      2000.09.20 04:36
      안녕하세요.. 김동원입니다. 저같은 경우는 보통 20만건 정도 되는데... 압축파일크기로 3M정도요.. 통...
    • 윤선철
    • 2000.09.20 01:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.09.20 01:46
      안녕하세요. 최용일입니다. StrPas늘 널종료문자열(PChar)을 델파이의 string타입으로 바꾸어주는 함수...
    • 델파이짱
      2000.11.03 21:15
      왕초보 wrote: > 잘되던 프로그램이 db연결 쪽에서 이런 에러가 나네요.. > 흑흑 이거 아시는 분들 꼭 좀...
    • 돌머리
      2000.09.20 00:56
      안녕하세요 김동원입니다. 제가 경험으로는 제어판의 프린트 환경도 같은 크기의 사이즈를 정의 해주니...
    • 초자
      2000.09.20 00:59
      감사합니다. 제어판 있는 용지 사이즈 정의가 있지만 제가 원하는 사이즈보다 기본 디폴트 사이즈가 커...
    • 돌머리
      2000.09.20 01:10
      저같은 경우에는 프린터 환경설정에서 사용자 정의크기로 같은 크기로 맞춰서 썼습니다... 조금 ...
    • 심철현
    • 2000.09.20 00:38
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 돌머리
      2000.09.20 00:52
      안녕하세요 김동원입니다. 간단말해서 할수 있습니다. type Ttestrec = record 필드1 : In...
    • 심철현
      2000.09.20 01:04
      우선 관심을 가져주셔서 감사합니다...^^ 엄청난 도움이 됐습니다... 덕분에 코딩이 훨신 쉬워지고, ...
    • 돌머리
      2000.09.20 00:45
      안녕하세요 김동원입니다. 한개의 폼에 두개의 유닛을 쓰는것은 간단합니다. Uses 절에 유닛의 이름만 ...
    • 이은정
      2000.09.20 01:14
      감사합니다. 한번 실행해 보도록 할께요.....^^ 돌머리 wrote: > 안녕하세요 김동원입니다. > >...