开始学习大师之作《UNIX 网络编程》,唯一不喜欢的是包裹函数
为青神等地区用户提供了全套网页设计制作服务,及青神网站建设行业解决方案。主营业务为网站设计制作、做网站、青神网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
#include "unp.h"
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2)
err_quit("usage: a.out ");
/*
* socket 函数创建一个网际(AF_INET)字节流(SOCK_STREAM)套接字
* sockfd 是一个小整数描述符,唯一标示一次套接字连接活动
* int socket(int domain, int type, int protocol)
* domain 通信协议的族
* PF_UNIX,PF_LOCAL 本地通信 PF_X25 ITU-T X25 / ISO-8208协议
* AF_INET,PF_INET IPv4 Internet协议 PF_AX25 Amateur radio AX.25
* PF_INET6 IPv6 Internet协议 PF_ATMPVC 原始ATM PVC访问
* PF_IPX IPX-Novell协议 PF_APPLETALK Appletalk
* PF_NETLINK 内核用户界面设备 PF_PACKET 底层包访问
*/
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
bzero(&servaddr, sizeof(servaddr));//初始化网际套接字地址结构
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13); /* port 13 daytime server */
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)//从argv[1] 中获取IP地址,并且格式化
err_quit("inet_pton error for %s", argv[1]);
/*
* int connect(int s, const struct sockaddr * name, int namelen)
* s:标识一个未连接socket
* name:指向要连接套接字的sockaddr结构体的指针
* namelen:sockaddr结构体的字节长度
*/
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)//servaddr 转 sockaddr
err_sys("connect error");
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
}
if (n < 0)
err_sys("read error");
exit(0);
}