***问题一:***为什么不用pid来标识,而是用端口号呢?
因为pid每次都在发生改变,而端口号不会发生改变
***问题二:***既然mac地址可以唯一标识,还要用ip地址呢?
因为mac无法表示出物理地址的变换。
***问题三:***为什么要分层?
分层是为了使各层之间相互独立,各自有最适合自己的功能和方法实现。
网络编程的流程:
服务器端代码:
1.引入头文件
网络地址转换方法
头文件netinet/in.h,host to net short将十进制整数
转化为网络编码
2.
创建套接字描述符
定义一个结构体,里面存放服务器端和客户端的地址,将来用于绑定,host to net short将十进制整数
转化为网络编码。 saddr.sin_addr.s_addr=inet_addr(xxx)//头文件arpa/inet.h自己设定的地址。
3.
绑定,将linux特有的sockaddr_in转化为通用的sockaddr结构体绑定在sockfd上。
并进行监听。
4.
step1:循环,可以重复输入,接收。
step2:当接收到一个消息时,定义一个新的描述符,将他绑定在套接字描述符上,后面都对这个c进行操作。(sockfd只相当于一个领路人,领完路后就回去继续领下一个人,而c才是真正对接你的人)
step3:接受描述符
step4:接收到buff中的数据。
客户端代码:
1.
2.
3.
前面和服务器端一样
之后发起链接
4.
从键盘上得到buff输入,发送给客户端,接收到反馈,关闭描述符。
运行结果: