2012-06-22 53 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,但在服務器端我看不到該客戶端發送任何數據。我想我也許與連接如設置有問題,但我一直在檢查一些網站,我不能夠捕獲錯誤

這就是程序打印:

正在等待服務器響應...

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

哎唷,我應該看到了。謝謝。 –