2015-01-17 13:40:24|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:C/C++, 网络通信|来源:唯设编程网
int recv (int sockfd, void *buf, int len, unsigned int flags);
返回:若成功则返回接收的字节数,失败则返回-1。
参数:sockfd为socket编号,buf用来接收数据,len表示数据长度,flags一般设为0。
使用端口号为21的FTP服务来测试数据接收函数。由于国内FTP服务器使用中文编码的问题,可能出现乱码,先用英文的FTP服务器进行测试。
在终端中输入如下指令:
ping ftp.gnu.org
结果为:
PING ftp.gnu.org (208.118.235.20) 56(84) bytes of data.
64 bytes from ftp.gnu.org (208.118.235.20): icmp_req=1 ttl=42 time=356 ms
说明ftp.gnu.org的IP地址为208.118.235.20,同时知道FTP默认端口为21,测试程序如recv_from_ftp.c所示:
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <fcntl.h> #include <sys/stat.h> #define PORT 21 #define FTP "208.118.235.20" int main() { int sockfd; struct sockaddr_in addr; if( (sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0 ) { perror("socket create error!"); exit(1); } else { printf("socket create successfully! "); printf("socket id:%d ",sockfd); } bzero(&addr,sizeof(struct sockaddr_in)); addr.sin_family=AF_INET; addr.sin_port=htons(PORT); addr.sin_addr.s_addr=inet_addr(FTP); if ( connect(sockfd, (struct sockaddr*)(&addr), sizeof(struct sockaddr)) < 0 ) { perror("connect error!"); exit(1); } else { printf("connected successfully! "); printf("ftp server ip:%s ",FTP); printf("ftp transfer port:%d ",PORT); } char buf[1024]; recv(sockfd,buf,sizeof(buf),0); printf("%s ",buf); return 0; }
运行结果如下:
socket create successfully!
socket id:3
connected successfully!
ftp server ip:208.118.235.20
ftp transfer port:21
220 GNU FTP server ready.
程序表明成功连接到FTP服务器,并得到了返回信息。