2015-01-21 1 views
-2

나는이 기능을 할 필요가 서버 측에서 서버와 이름이 Y에 로컬 파일 X를 업로드C의 서버에서 클라이언트로 파일을 업로드하는 방법은 무엇입니까? XY를 넣어 :

이미 연결을 설정하는 데 필요한 모든 것을 썼다가, 난 단지 방법을 알고 싶어요 파일을 올리다. 4 매개 변수가있는 send() 함수 만 알고 있지만 문자 배열을 보내는 것처럼 보입니다. 예를 들어 이미지와 같은 전체 파일을 어떻게 보냅니 까?

Windows에서 HTTP를 사용 중입니다.

+3

이 질문은 파일과 그 내용의 차이점을 이해하지 못한다는 것을 의미합니다. 바이트 인 파일 내용을 보내려고합니다. –

+0

그래서 그냥 send 함수를 사용합니까? 방법? – terminator847

+0

서버가 HTTP, FTP (etc ...)를 사용하는 경우 [libcurl] (http://curl.haxx.se/libcurl/)과 같은 HTTP 클라이언트 라이브러리를 사용해야합니다. 당신의 질문은 운영체제마다 다름을주의하십시오 (표준 C11은 소켓에 대해 알지 못합니다) –

답변

1

그냥 읽기 파일에서 바이트 및

int size; 
unsigned char buffer[SOME_REASONABLE_SIZE]; 

size = read(fd, buffer, sizeof(buffer)); 
if (size == -1) 
    aReadErrorHandleIt(); 
if (write(sockfd, buffer, size) == -1) 
    aWriteErrorHandleIt(); 

할 소켓에 기록 즉

int fd = open(localFileName, O_RDONLY); 
if (fd == -1) 
    errorFileCantBeOpenedForReadingAbortThis(); 
  • 를 읽는 open()

    1. 열고 로컬 파일을 이것은 모든 데이터가 기록 될 때까지 반복됩니다. 서버 측에서

    , 당신은 아마 put 명령 또는 사용자가 지정한 수있는 몇 가지 사용자 정의 명령을 통해 지정된 파일에 데이터를 작성해야합니다.

    물론 먼저 파일 쓰기가 파일을 시작하고 쓰기 위해 열려 있음을 나타내는 내용과 함께 대상 파일 이름을 서버에 보내야합니다.

    서버에서 클라이언트에게 쓰기가 시작될 수 있음을 알리고 클라이언트가 보낼 때까지 쓰기가 시작되어 모두 보내 졌음을 나타낼 수 있으면 서버가 파일을 닫을 수 있습니다.

  • +0

    그래서 그냥 루프에서 send() 또는 read() 함수를 사용합니까? – terminator847

    +0

    @ terminator847 꽤 많은 일을 처리 할 수 ​​있지만, 파일 복사는 이런 방식으로 수행됩니다. 또한 파일 크기를 서버에 보내서 전송이 완료되었는지 확인할 수 있습니다. 실제로 시작할 부분과 보내는/수신을 중단 할시기를 아는 방법은 실제로 어려운 부분입니다. –

    관련 문제