2012-06-22 3 views
1

Winsock으로 간단한 FTP 클라이언트를 코딩하려고합니다.Winsock에서 데이터를 전송하는 중 C++

using namespace std; 
#include <iostream> 

#include <cstring> 
#include <cstdio> 

#include <winsock.h> 
#include <windows.h> 

int main() { 

    const int MAX_TRIES = 10; 

    char * host = "localhost"; 
    int port = 21; 
    char * userName = "b8_8780454"; 
    char * pass = "test"; 
    char * testFileSource = "C:\\Windows\\notepad.exe"; 

    WSADATA WSAData; 
    SOCKADDR_IN server; 
    SOCKET sock; 

    WSAStartup(MAKEWORD(2,2), &WSAData); 
    sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 
    if (sock == INVALID_SOCKET) { 
     cout<<"fail"; 
     return -1; 
    } 

    server.sin_family = PF_INET; 
    server.sin_port = htons(port); 
    server.sin_addr = *((struct in_addr *)gethostbyname(host)->h_addr); 
    memset(server.sin_zero,0,8); 

    int errorCode = connect(sock, (LPSOCKADDR)&server, sizeof(struct sockaddr)); 
    int tries = 0; 

    while (errorCode == SOCKET_ERROR) { 
     if (tries >= MAX_TRIES) { 
      cout<<"fail 2"; 
      return -1; 
     } 
     errorCode = connect(sock, (LPSOCKADDR)&server, sizeof(struct sockaddr)); 
     tries++; 
    } 


    char serverMsg[2048]; 
    Sleep(1000); 
    cout<<"Waiting for server response..."<<endl; 
    int r = recv(sock,serverMsg,2048,0); 
    serverMsg[r] = '\0'; 
    cout<<endl<<endl<<"Server said: "<<endl<<serverMsg<<endl<<endl; 

    char userB[1024] = "USER "; 
    strcat(userB,userName); 
    cout<<"Sending... "<<userB<<endl; 
    cout<<"sended: "<<send(sock, userB, strlen(userB), 0)<<" bytes"<<endl; 
    Sleep(1000); 
    cout<<"Waiting for server response..."<<endl; 

    serverMsg[0] = '\0'; 
    recv(sock,serverMsg,2048,0); // <-- program keeps lock here 
    cout<<endl<<endl<<"Server said: "<<endl<<serverMsg<<endl<<endl; 
    getchar(); 
    return 0; 
} 

내가 전송이 제대로 작동하지 그럼에도 불구하고이> 0을 반환하지만 서버 측에서 내가이 클라이언트가 데이터를 전송 볼 수 있다고 생각 :

나는 다음과 같은 코드가 있습니다. 나는 어쩌면 i를 conection에 설정에 문제가 있다고 생각하지만, 내가 어떤 사이트를 확인하고하고 난이 어떤 프로그램을 인쇄하다 오류

을 잡을 수 없습니다입니다 ...

는 서버 응답을 기다리는 중

Server said: 
220-FileZilla Server version 0.9.31 beta 
220-written by Tim Kosse ([email protected]) 
220 Please visit http://sourceforge.net/projects/filezilla/ 


Sending... USER b8_8780454 
sended: 15 bytes 
Waiting for server response... 


Server said: 
421 Login time exceeded. Closing control connection. 
by Tim Kosse ([email protected]) 
220 Please visit http://sourceforge.net/projects/filezilla/ 

내 FTP 서버에서이 클라이언트가 서버로 데이터를 보내는 것을 볼 수 없습니다. 어떤 단서?

답변

2

사용자 이름 뒤에 새로운 줄이 필요합니다 (\n).

strcat(userB,userName); 
strcat(userB,"\n"); 
+0

나는 그것을보아야 만했다. 감사. –

관련 문제