開始學(xué)習(xí)大師之作《UNIX 網(wǎng)絡(luò)編程》,唯一不喜歡的是包裹函數(shù)
為青神等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及青神網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、青神網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
#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 函數(shù)創(chuàng)建一個(gè)網(wǎng)際(AF_INET)字節(jié)流(SOCK_STREAM)套接字
* sockfd 是一個(gè)小整數(shù)描述符,唯一標(biāo)示一次套接字連接活動(dòng)
* int socket(int domain, int type, int protocol)
* domain 通信協(xié)議的族
* PF_UNIX,PF_LOCAL 本地通信 PF_X25 ITU-T X25 / ISO-8208協(xié)議
* AF_INET,PF_INET IPv4 Internet協(xié)議 PF_AX25 Amateur radio AX.25
* PF_INET6 IPv6 Internet協(xié)議 PF_ATMPVC 原始ATM PVC訪問
* PF_IPX IPX-Novell協(xié)議 PF_APPLETALK Appletalk
* PF_NETLINK 內(nèi)核用戶界面設(shè)備 PF_PACKET 底層包訪問
*/
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
bzero(&servaddr, sizeof(servaddr));//初始化網(wǎng)際套接字地址結(jié)構(gòu)
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:標(biāo)識(shí)一個(gè)未連接socket
* name:指向要連接套接字的sockaddr結(jié)構(gòu)體的指針
* namelen:sockaddr結(jié)構(gòu)體的字節(jié)長(zhǎng)度
*/
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)//servaddr 轉(zhuǎn) 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);
}