linux c socket 模拟登陆FTP

本文将介绍如何利用C++和Socket编程实现FTP客户端的功能,包括与服务器建立连接、发送请求、接收响应等关键步骤。通过实例代码演示了从创建socket到执行FTP命令的全过程。
#include <stdio.h> #include <iostream> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #define BUF_SIZE 1024 using namespace std; int send_msg(int sfd, const char*msg) { return write(sfd, msg, strlen(msg)); } int get_msg(int sfd, string**ppstr, bool oneline = false) { int len, tmplen, i = 0; char buf[BUF_SIZE]; while(tmplen = read(sfd, buf, BUF_SIZE)) { buf[tmplen] = 0; len += tmplen; (*ppstr)->append(buf); if(oneline) break; } return len; } int main(int argc, char **argv) { int sfd, res; sfd = socket(AF_INET, SOCK_STREAM, 0); if(-1 == sfd) { cout<<"创建socket出错!"<<endl; exit(1); } cout<<"socket创建成功!"<<endl; struct sockaddr_in sin; memset(&sin, 0, sizeof(sockaddr_in)); sin.sin_family = AF_INET; sin.sin_port = htons(21); sin.sin_addr.s_addr = inet_addr("61.164.115.208"); res = connect(sfd, (sockaddr*)&sin, sizeof(sockaddr_in)); if(-1 == res) { cout<<"连接服务器出错!"<<endl; exit(2); } cout<<"连接服务器成功!"<<endl; res = send_msg(sfd, ""); if(-1 == res) { cout<<"发送消息''时发生错误!"<<endl; exit(3); } string *str = new string; get_msg(sfd, &str, true); if("220" != str->substr(0, 3)) { exit(4); } cout<<str->data()<<endl; res = send_msg(sfd, "USER wed577\r\n"); if(-1 == res) { cout<<"发送消息'USER wed577'时发生错误!\r\n"<<endl; exit(5); } str->resize(0); get_msg(sfd, &str, true); if("331" != str->substr(0, 3)) { exit(6); } cout<<str->data()<<endl; res = send_msg(sfd, "PASS 703804wed577\r\n"); if(-1 == res) { cout<<"发送消息'PASS 703804wed577\r\n'时发生错误!"<<endl; exit(7); } str->resize(0); get_msg(sfd, &str, true); if("230" != str->substr(0, 3)) { exit(8); } cout<<str->data()<<endl; res = send_msg(sfd, "QUIT\r\n"); str->resize(0); get_msg(sfd, &str, true); cout<<str->data()<<endl; return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值