gpt4 book ai didi

c++ - vc++ - 套接字没有写入端口

转载 作者:行者123 更新时间:2023-11-30 03:08:01 25 4
gpt4 key购买 nike

我正在尝试创建一个具有上传文件功能的 ftp 客户端。但是套接字没有将消息发送到服务器,即使它与服务器建立了连接。看下面的代码

#include <iostream>
#include <string>
#include <tchar.h>
#include <Winsock2.h>

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc,wchar_t * argv[])
{

WSADATA wsaData = {0};
int iResult = 0;

iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (iResult != 0)
{
wprintf(L"WSAStartup failed: %d\n", iResult);
return 1;
}

SOCKET sock= socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock == INVALID_SOCKET)
wprintf(L"socket function failed with error = %d\n", WSAGetLastError() );
else
std::wcout << " Success occured in socket creation " << std::endl ;

SOCKADDR_IN sock_Addr={0};
sock_Addr.sin_family=AF_INET;
sock_Addr.sin_port=htons(21);
sock_Addr.sin_addr.S_un.S_addr=inet_addr("10.0.0.105");

char recv_Buf[1000]={'\0'};
if(connect(sock,(SOCKADDR *)&sock_Addr,sizeof(SOCKADDR_IN)) != 0)
std::cout << " Error in connection " << std::endl ;
else
{
std::string tmp;
u_long mode =1; // non blocking socket
ioctlsocket(sock,FIONBIO,&mode);
int result = recv(sock,recv_Buf,sizeof(recv_Buf),0);
while( result > 0 )
{
tmp=tmp+recv_Buf;
result = recv(sock,recv_Buf,sizeof(recv_Buf),0);
}
std::cout << "connection - success - " << tmp << std::endl ;
}

ioctlsocket(sock,FIONBIO,0);
std::string buf="USER administrator";
if(send(sock,buf.c_str(),buf.size(),0)== SOCKET_ERROR)
std::cout << " sending user - error " << WSAGetLastError() << std::endl ;
else
{
std::string tmp;
u_long mode =1; // non blocking socket
ioctlsocket(sock,FIONBIO,&mode);
int result = recv(sock,recv_Buf,sizeof(recv_Buf),0);
while( result > 0 )
{
tmp=tmp+recv_Buf;
result = recv(sock,recv_Buf,sizeof(recv_Buf),0);
std::cout << "received " << recv_Buf << std::endl ;
}
std::cout << "user - success - " << tmp << std::endl ;
}
}

注意:我正在使用 filezilla检查这个。它将显示传入的连接和命令。 因此,如果有人在这个问题上指导我,我将感谢你。

编辑 下面是客户端(我这边)命令提示结果

socket创建成功

连接 - 成功 - 220-FileZilla Server 版本 0.9.37 beta

220 - 由 Tim Kosse (Tim.Kosse@gmx.de) 编写

220 请访问​​http://sourceforge.net/projects/filezilla/

用户 - 成功 -

按任意键继续。 . .

这个是在服务器端显示的

(000007)5/17/2011 23:32:02 PM -(未登录)(10.0.0.105)> 已连接,正在发送欢迎消息...

(000007)5/17/2011 23:32:02 PM -(未登录)(10.0.0.105)> 220-FileZilla Server 版本 0.9.37 beta

(000007)5/17/2011 23:32:02 PM -(未登录)(10.0.0.105)> 220 - 作者 Tim Kosse (Tim.Kosse@gmx.de)

(000007)5/17/2011 23:32:02 PM -(未登录)(10.0.0.105)> 220 请访问​​ http://sourceforge.net/projects/filezilla/

(000007)5/17/2011 23:32:02 PM -(未登录)(10.0.0.105)> 已断开连接。

最佳答案

FTP 命令以回车换行符 (\r\n) 结束。您需要将\r\n 添加到您的 USER 命令字符串中。

编辑:你应该咨询RFC 959了解更多信息(还有更多与 FTP 相关的 RFC 也更新和扩展了 RFC 959)。它有一个部分详细介绍了基本的 FTP 命令并显示了预期的格式,包括 对。

关于c++ - vc++ - 套接字没有写入端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5447635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com