2015-01-18 09:59:35|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:C/C++, 网络通信|来源:唯设编程网
当客户端与服务器建立连接后,服务器会返回 220 的响应码和一些欢迎信息。
图 1. 客户端连接到服务器端
清单 1. 客户端连接到 FTP 服务器,接收欢迎信息
SOCKET control_sock; struct hostent *hp; struct sockaddr_in server; memset(&server, 0, sizeof(struct sockaddr_in)); /* 初始化socket */ control_sock = socket(AF_INET, SOCK_STREAM, 0); hp = gethostbyname(server_name); memcpy(&server.sin_addr, hp->h_addr, hp->h_length); server.sin_family = AF_INET; server.sin_port = htons(port); /* 连接到服务器端 */ connect(control_sock,(struct sockaddr *)&server, sizeof(server)); /* 客户端接收服务器端的一些欢迎信息 */ read(control_sock, read_buf, read_len);
当客户端发送用户名和密码,服务器验证通过后,会返回 230 的响应码。然后客户端就可以向服务器端发送命令了。
图 2. 客户端登录 FTP 服务器
清单 2. 客户端发送用户名和密码,登入 FTP 服务器
/* 命令 ”USER username ” */ sprintf(send_buf,"USER %s ",username); /*客户端发送用户名到服务器端 */ write(control_sock, send_buf, strlen(send_buf)); /* 客户端接收服务器的响应码和信息,正常为 ”331 User name okay, need password.” */ read(control_sock, read_buf, read_len); /* 命令 ”PASS password ” */ sprintf(send_buf,"PASS %s ",password); /* 客户端发送密码到服务器端 */ write(control_sock, send_buf, strlen(send_buf)); /* 客户端接收服务器的响应码和信息,正常为 ”230 User logged in, proceed.” */ read(control_sock, read_buf, read_len);