启动daytimetcpcli
前先启动 daytimetcpsrv
题1.3
单独改 daytimetcpcli
的端口号sin_port = 9999
结果 :
lin:~/unix-network-programing/unpv13e/intro$ ./daytimetcpcli 127.0.0.1
connect error: Connection refused
原因: 服务器程序daytimetcpsrv
的端口没有改,仍然是13, 因此,客户端程序 daytimetcpcli
无法与服务器程序连接通信。
题1.4
累计read返回大于0的次数,在终止前输出计数器i 的值。
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
i++; /* /count/ */
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
}
printf("count of read:%d\n",i);
题1.5
修改服务器程序的端口为9999后,两者可以通信。计数器的数值为2,不应该是26(字节数)吗?
答:嗯嗯,是得26次,你上面的没修改到,请看下面。
程序修改 :
n = strlen(buff);
while(i<n) {
Write(connfd, buff+i++,1);//每次只发送一个字节
}
Close(connfd);
}
客户端程序每次只读一个字节:
while ( (n = read(sockfd, recvline+i, 1)) > 0) {
i++; /* /count/ */
recvline[n] = 0; /* null terminate */
//if (fputs(recvline, stdout) == EOF)
// err_sys("fputs error");
}
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
简单说一下:
Write(int fd, char *buff,int nbyte) fd为写文件,buff是内存的数组,nbyte 是每次写的字节数,即从buff数组中读nbyte字节到fd文件中。
ssize_t read(int fd, void *buf, size_t count)
fd是读取内容的文件描述符,*buf 是存放读取内容的数组,count 是请求读取字节数,即从fd指定的文件中读取内容到buf数组中,并返回读取内容的字节数。