recv関数使用例
2315 ワード
recv関数使用例
このセクションでは、recv関数の使用例について説明します.プログラムでは北京大学のFTPサーバに接続し,recv関数でftpサーバから返される情報を取得する.北京大学のFTPサーバードメイン名は以下の通りです.
端末に次のコマンドを入力し、このドメイン名のIPアドレスを取得します.
端末に表示される結果は以下の通りです.
北京大学のFTPサーバーのIPアドレスは202.38です.97.197.FTPサービスのポート番号は21です.プログラムのコードは以下の通りです.
コード17-5 recv関数受信データ:ソースファイル1717.23.c
次のコマンドを入力して、このプログラムをコンパイルします.
次のコマンドを入力して、このプログラムに実行可能な権限を追加します.
次のコマンドを入力して、このプログラムを実行します.
プログラムの実行結果は以下の通りです.その結果,プログラムは北京大学のFTPサーバに正しく接続されていることが分かった.サーバからウェルカムメッセージが返されました.
このセクションでは、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.