`

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.197
remote port:21
220 Welcome to VINEYARD FTP service.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics