recv函数使用实例
本节将讲解一个recv函数使用实例。在程序中,连接到北京大学的FTP服务器,然后用recv函数取得ftp服务器返回的信息。北京大学的FTP服务器域名如下所示。
ftp.pkp.edu.cn |
在终端中输入下面的命令,取得这个域名的IP地址。
ping ftp.pku.edu.cn |
终端中显示的结果如下所示。
PING vineyard.pku.edu.cn (202.38.97.197) 56(84) bytes of data. |
所以北京大学FTP服务器的IP地址是202.38.97.197。FTP服务的端口号是21。程序的代码如下所示。
代码17-5 recv函数接收数据:\源文件\17\17.23.c
#include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/socket.h> /*包含头文件。*/ #define PORT 21 /*定义一个端口号。*/ #define REMOTE_IP "202.38.97.197" /*定义一个IP地址。*/ int main(int argc,char *argv[]) { int s ; /*定义相关的变量。*/ struct sockaddr_in addr ; char mybuffer[256]; if( (s=socket(AF_INET,SOCK_STREAM,0))<0 ) /*建立一个socket。*/ { perror("socket"); exit(1); } else { printf("socket created .\n"); /*socket建立成功。*/ printf("socked id: %d \n",s); } bzero(&addr,sizeof(addr)); /*清空addr所占的内存。*/ addr.sin_family =AF_INET; /*设置addr的成员。*/ addr.sin_port=htons(PORT); addr.sin_addr.s_addr=inet_addr(REMOTE_IP); if(connect(s,&addr,sizeof(addr))<0) /*连接远程服务器。*/ { perror("connect"); exit(1); } else { printf("connected ok!\n"); /*连接成功。*/ printf("remote ip:%s\n",REMOTE_IP); printf("remote port:%d\n",PORT); } recv(s ,mybuffer,sizeof(mybuffer),0); /*接收信息。*/ printf("%s\n",mybuffer); /*输出接收到的信息。*/ } |
输入下面的命令,编译这个程序。
gcc 17.23.c |
输入下面的命令,对这个程序添加可执行权限。
chmod +x a.out |
输入下面的命令,运行这个程序。
./a.out |
程序的运行结果如下所示。结果表明程序已经正确连接到了北京大学的FTP服务器。服务器返回了一段欢迎信息。
socket created . socked id: 3 connected ok! remote ip:202.38.97.197 remote port:21 220 Welcome to VINEYARD FTP service. |