recv関数使用例

2315 ワード

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関数受信データ:ソースファイル1717.23.c
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include         /*     。*/
#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 .
");     /*socket 。*/ printf("socked id: %d
",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!
");     /* 。*/     printf("remote ip:%s
",REMOTE_IP);     printf("remote port:%d
",PORT); }
   recv(s ,mybuffer,sizeof(mybuffer),0);   /*    。*/
printf("%s
",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.