개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.07 05:18

FTP_nb_put 함수에 대한 질문

목록
  • 트랜잭션장인 4일 전 2025.06.07 05:18
  • 47
    1
저는 네트워크 프로그래밍을 공부하고 있습니다. FTP_nb_put 함수에 대해 궁금한 점이 있습니다.

FTP_nb_put 함수는 네트워크 버퍼를 사용하여 파일을 전송할 때 사용하는 함수로, 비동기적으로 파일을 전송할 수 있습니다. 그러나 저는 이 함수의 사용법과 동작 방식에 대해 이해가 부족한 상태입니다.

다음과 같은 코드를 작성하였습니다.

```c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define PORT "21"
#define USER "anonymous"
#define PASSWD "anonymous"
#define RENAME "test.txt"
#define SIZE 1024

int main() {
int sock;
struct sockaddr_in server_addr;
char buffer[SIZE];
int bytes_received;

// FTP 서버 연결
sock = socket(AF_INET, SOCK_STREAM, 0);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(21);
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));

// FTP 서버에 로그인
send(sock, "USER " USER "\r\n", strlen("USER " USER "\r\n"), 0);
send(sock, "PASS " PASSWD "\r\n", strlen("PASS " PASSWD "\r\n"), 0);

// FTP 서버에 파일 전송
send(sock, "PUT " RENAME "\r\n", strlen("PUT " RENAME "\r\n"), 0);

// 파일 내용 전송
int fd = open(RENAME, O_RDONLY);
char *buf = malloc(SIZE);
while (1) {
bytes_received = read(fd, buf, SIZE);
if (bytes_received <= 0) break;
send(sock, buf, bytes_received, 0);
}
free(buf);
close(fd);

// FTP 서버에 파일 이름 변경
send(sock, "RNFR " RENAME "\r\n", strlen("RNFR " RENAME "\r\n"),

    댓글목록

    profile_image
    나우호스팅  4일 전



    FTP_nb_put 함수는 네트워크 버퍼를 사용하여 파일을 전송할 때 사용하는 함수로, 비동기적으로 파일을 전송할 수 있습니다. 이 함수는 send() 함수와 유사하지만, send() 함수는 블로킹 방식으로 파일을 전송하지만, FTP_nb_put 함수는 비동기적으로 파일을 전송할 수 있습니다.

    FTP_nb_put 함수를 사용하려면, 먼저 네트워크 버퍼를 초기화해야 합니다. 이 버퍼는 파일을 전송할 때 사용하는 버퍼입니다. 버퍼를 초기화한 후, FTP_nb_put 함수를 사용하여 파일을 전송할 수 있습니다.

    FTP_nb_put 함수의 사용법은 다음과 같습니다.

    #hostingforum.kr
    c
    
    int FTP_nb_put(int sock, const char *buf, size_t len, struct pollfd *pfd);
    
    


    * sock: FTP 서버와의 소켓
    * buf: 파일 내용을 담은 버퍼
    * len: 버퍼에 담긴 파일 내용의 크기
    * pfd: 폴링 정보

    FTP_nb_put 함수를 사용하여 파일을 전송할 때, 폴링 정보를 전달해야 합니다. 폴링 정보는 FTP_nb_put 함수가 파일 전송을 완료할 때까지 대기할 수 있는 시간을 지정합니다.

    폴링 정보를 전달하는 방법은 다음과 같습니다.

    #hostingforum.kr
    c
    
    struct pollfd pfd;
    
    pfd.fd = sock;
    
    pfd.events = POLLOUT;
    
    pfd.revents = 0;
    
    
    
    if (FTP_nb_put(sock, buf, len, &pfd) == 0) {
    
        // 파일 전송 완료
    
    } else {
    
        // 파일 전송 실패
    
    }
    
    


    폴링 정보를 전달하지 않으면, FTP_nb_put 함수는 블로킹 방식으로 파일을 전송합니다. 폴링 정보를 전달하면, FTP_nb_put 함수는 비동기적으로 파일을 전송할 수 있습니다.

    FTP_nb_put 함수를 사용하여 파일을 전송하는 예제는 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    #define PORT "21"
    
    #define USER "anonymous"
    
    #define PASSWD "anonymous"
    
    #define RENAME "test.txt"
    
    #define SIZE 1024
    
    
    
    int main() {
    
        int sock;
    
        struct sockaddr_in server_addr;
    
        char buffer[SIZE];
    
        int bytes_received;
    
        struct pollfd pfd;
    
    
    
        // FTP 서버 연결
    
        sock = socket(AF_INET, SOCK_STREAM, 0);
    
        server_addr.sin_family = AF_INET;
    
        server_addr.sin_port = htons(21);
    
        inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
    
        connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
    
    
    
        // FTP 서버에 로그인
    
        send(sock, "USER " USER "\r\n", strlen("USER " USER "\r\n"), 0);
    
        send(sock, "PASS " PASSWD "\r\n", strlen("PASS " PASSWD "\r\n"), 0);
    
    
    
        // FTP 서버에 파일 전송
    
        send(sock, "PUT " RENAME "\r\n", strlen("PUT " RENAME "\r\n"), 0);
    
    
    
        // 파일 내용 전송
    
        int fd = open(RENAME, O_RDONLY);
    
        char *buf = malloc(SIZE);
    
        while (1) {
    
            bytes_received = read(fd, buf, SIZE);
    
            if (bytes_received <= 0) break;
    
            pfd.fd = sock;
    
            pfd.events = POLLOUT;
    
            pfd.revents = 0;
    
            if (FTP_nb_put(sock, buf, bytes_received, &pfd) == 0) {
    
                // 파일 전송 완료
    
            } else {
    
                // 파일 전송 실패
    
            }
    
        }
    
        free(buf);
    
        close(fd);
    
    
    
        // FTP 서버에 파일 이름 변경
    
        send(sock, "RNFR " RENAME "\r\n", strlen("RNFR " RENAME "\r\n"), 0);
    
        send(sock, "RNTO " RENAME "\r\n", strlen("RNTO " RENAME "\r\n"), 0);
    
    
    
        close(sock);
    
        return 0;
    
    }
    
    


    이 예제는 FTP_nb_put 함수를 사용하여 파일을 전송하는 방법을 보여줍니다. FTP_nb_put 함수를 사용하여 파일을 전송할 때, 폴링 정보를 전달해야 합니다. 폴링 정보를 전달하지 않으면, FTP_nb_put 함수는 블로킹 방식으로 파일을 전송합니다. 폴링 정보를 전달하면, FTP_nb_put 함수는 비동기적으로 파일을 전송할 수 있습니다.

    2025-06-07 05:19

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 27,035건 / 1 페이지

검색

게시물 검색