Q&A

  • 파일전송으로 머리가 아픈 학생입니다. 소스가 있으니 지도 부탁합니다.
안녕 하세요...

전 대구대 학생이구요... 서버와 클라이언트 소켓으로 인터넷메신저를 만들어

보고 있습니다.

다름이 아니라 파일을 첨부하여 전송하려구 하는데 잘 되지를 않아서 이렇게

질문을 올립니다.

델코에도 올려 봤지만 시원한 대답과 방법을 찾지를 못했습니다.



어떤 파일을 일정한 크기로 잘라서 보내라는 대답을 들었었는데...

그 방법을 모르겠습니다.

파일을 열어서 일정한 크리만큼 읽어서 버퍼에 넣었습니다.

그리고 sendbuf 했는데 문제는 받는측에서의 receivebuf 입니다.



이것은 보내는 쪽의 소스입니다.

procedure TForm1.Button1Click(Sender: TObject);

var

source: integer;

i : integer;

buffer : array [0..1023] of byte;

begin

if opendialog1.Execute then

source := fileopen (opendialog1.filename, fmopenread);

i := fileread (source , buffer,sizeof(buffer));

while i > 0 do begin

clientsocket1.Socket.SendBuf (buffer,i);

i := fileread (source, buffer,sizeof(buffer));

end;

fileclose(source);



end;



이것은 받는쪽의 소스입니다.

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

var

i : integer;

buffer : array [0..1023] of byte;

begin

target := fileopen('d:testfilesendaaa',fmopenwrite);

i := serversocket1.socket.ReceiveBuf(buffer,1024);<-????이부분

filewrite(target,buffer,i);

fileclose(target);

end;



제 생각에는 이렇게 하면 간단히 갈거란 생각을 했는데 이게 아니더라구요...

주고 받는데 에러가 납니다.

보내는 쪽과 받는 쪽에서 신경을 써야 할 부분이 어떤것인지요?

시원한 대답과 함께... 소스의 잘못된 점을 지적해 주십시오..

1  COMMENTS
  • Profile
    박성훈 2000.02.27 00:35
    김영습 wrote:

    > 안녕 하세요...

    > 전 대구대 학생이구요... 서버와 클라이언트 소켓으로 인터넷메신저를 만들어

    > 보고 있습니다.

    > 다름이 아니라 파일을 첨부하여 전송하려구 하는데 잘 되지를 않아서 이렇게

    > 질문을 올립니다.

    > 델코에도 올려 봤지만 시원한 대답과 방법을 찾지를 못했습니다.

    >

    > 어떤 파일을 일정한 크기로 잘라서 보내라는 대답을 들었었는데...

    > 그 방법을 모르겠습니다.

    > 파일을 열어서 일정한 크리만큼 읽어서 버퍼에 넣었습니다.

    > 그리고 sendbuf 했는데 문제는 받는측에서의 receivebuf 입니다.

    >

    > 이것은 보내는 쪽의 소스입니다.

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > source: integer;

    > i : integer;

    > buffer : array [0..1023] of byte;

    > begin

    > if opendialog1.Execute then

    > source := fileopen (opendialog1.filename, fmopenread);

    > i := fileread (source , buffer,sizeof(buffer));

    > while i > 0 do begin

    > clientsocket1.Socket.SendBuf (buffer,i);

    > i := fileread (source, buffer,sizeof(buffer));

    > end;

    > fileclose(source);

    >

    > end;

    >

    > 이것은 받는쪽의 소스입니다.

    > procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

    > Socket: TCustomWinSocket);

    > var

    > i : integer;

    > buffer : array [0..1023] of byte;

    > begin

    > target := fileopen('d:testfilesendaaa',fmopenwrite);

    > i := serversocket1.socket.ReceiveBuf(buffer,1024);<-????이부분

    > filewrite(target,buffer,i);

    > fileclose(target);

    > end;

    >

    > 제 생각에는 이렇게 하면 간단히 갈거란 생각을 했는데 이게 아니더라구요...

    > 주고 받는데 에러가 납니다.

    > 보내는 쪽과 받는 쪽에서 신경을 써야 할 부분이 어떤것인지요?

    > 시원한 대답과 함께... 소스의 잘못된 점을 지적해 주십시오..