recv函数使用实例
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.197remote port:21220 Welcome to VINEYARD FTP service.