socket编程:
socket是应用层与tcp/ip协议族通信的中间抽象层,它是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的tcp/ip协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。所以,我们无需深入理解tcp/ip协议,socket已经为我们封装好了,我们值需要遵守socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
同一台主机进程间不能直接通信。
套接字工作流程:
内存分为用户态(存放应用程序代码)和内核态(存放操作系统代码的)。
收发都是在自己的缓存区,接受的都是字节,和对方没关系,那是操作系统的事。
队列是先进先出,栈是先进后出,接受消息用的是对列。
基于udp的套接字:
QQ聊天(由于udp是基于无连接的,所以一个服务器可以服务多个客户端)
recv和recvfrom的区别:
recv是基于tcp的,recvfrom是基于udp的。
tcp:send发消息,recv收消息.
udp:sendto发消息,recvfrom收消息。
两个程序间的通信可以通过管道进行。
粘包现象:粘包现象只发生在tcp通信中,udp中不存在粘包现象。