【问题标题】:Winsock problems sending data C++Winsock 发送数据 C++ 的问题
【发布时间】:2012-06-25 02:22:09
【问题描述】:

我正在尝试使用 Winsock 编写一个简单的 FTP 客户端。

我有以下代码:

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 (Tim.Kosse@gmx.de)
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 (Tim.Kosse@gmx.de)
220 Please visit http://sourceforge.net/projects/filezilla/

在我的 FTP 服务器中,我看不到此客户端向服务器发送任何数据。有什么线索吗?

【问题讨论】:

    标签: c++ sockets winsock send


    【解决方案1】:

    您的用户名后需要一个新行 (\n)。

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

    【讨论】:

    • 哎呀,我应该看到了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多