内心好奇又烦恼,不知道的太多了。
先不总结我学习的TCP/IP。因为我都不好意思说我在学习TCP/IP.挡不住内心的悲伤。
描述一个网络中的各个协议的常用方法是使用International Organization for Standardization的open systems interconnection模型,简称OSI模型。它与网际网协议族对比如下:
看一个简单的时间获取客户程序
#include "net.h"
#define MAX_SIZE 1024
int main(int argc,char **argv)
{
int sockfd;
int n;
char recv[MAX_SIZE + 1];
struct sockaddr_in servaddr;
/*
终端输入a.out 和IP地址
*/
if(argc != 2) {
printf("please input a.out and IP\n");
exit(0);
}
/*
socket创建了一个网际(AF_INET)字节流(SOCK_STREAM)套接字,是TCP套接字的花哨名字,以后的所有函数都用这个sockfd来描述这个套接字
*/
if( sockfd = socket(AF_INET,SOCK_STREAM,0) < 0){
printf("error when build the sockfd\n");
exit(0);
}
/*
对套接字结构清零
*/
bzero(&servaddr,sizeof(servaddr));
/*
地址族是AF_INET,端口是13,这是时间或取服务器的著名端口
*/
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
/*
inet_pton()函数,呈现形式到数值。是为了把ASC命令行参数形式转变为更加合适的形式
*/
if(inet_pton(AF_INET,argv[1],aervaddr.sin_addr) < 0){
printf("IP translates fail\n");
exit(0);
}
/*
connect执行:与第二个参数指向的地址结构的服务器建立连接
*/
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(sockaddr)) < 0) {
printf("connect fails\n");
exit(0);
}
/*
不断读取服务器的应答
*/
while(n = read(socked,recv,MAX_SIZE) > 0) {
recv[n] = '\0';
if(fputs(recv,stdout) == EOF) {
printf("output fails\n");
exit(0);
}
}
if(n < 0){
printf("read fails\n");
exit(0);
}
return 0;
}
看一个时间获取服务器程序
#include "net.h"
#define MAX_SIZE 1024
int main(int argc,char **argv)
{
int sockfd;
int connfd;
struct sockaddr_in servaddr;
char buff[MAX_SIZE];
time_t time_now;
sockfd = socket(AF_INET,SOCK_STREAM,0));
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);
if(bind(sockfd,(struct sockaddr *)&servaddr),sizeof(servaddr)) < 0){
printf("bing fails \n");
exit(0);
}
/*
listen()函数把套接字转变成一个监听套接字
LISTENQ是允许在这个监听描述符上排队的最大监听数
*/
if(listen(sockfd,LISTENQ) < 0) {
printf("listen fails\n");
exit(0);
}
for(;;){
connfd = accept(sockfd,(struct sockaddr*)NULL,NULL);
time_now = time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(time_now));
write(connfd,buff,strlen(buff));
close(connfd);
}
return 0;
}
我netstat -ni以后
然后输入了ifconfig enp2s0:
最终结果是:pint这个广播地址:
找出了本网络中各主机的IP地址。
POSIX:
Portable Operating System Interface of Unix 的缩写:
https://en.wikipedia.org/wiki/POSIX