我们介绍过进程间通讯的方式有:管道、信号量、共享内存、消息队列,但这些通讯方式都是在本地上通讯的,那么在现实生活中还有一种通信方式,不同主机上的两个进程之间的通讯,是通过socket套接字来完成的。
比如,生活中聊天软件QQ,你和好友之间的聊天,就是网络通讯。你是客户端,好友也是客户端,那么你们之间能够通讯是因为中间还有个服务器在工作。
服务器:提供数据的为服务器
客户端:获取数据的为客户端
在计算机中要做到有条不紊的交换数据,就必须遵守一些实现约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。
所以我们有了网络协议,网络协议有TCP/IP UDP/IP
协议的选择: TCP 的特点: 面向连接 可靠传输 流式服务
UDP的特点: 无连接 不可靠 数据报服务
这里我们主要说说TCP和UDP的编程流程
TCP的编程流程:
server(服务器): socket bind listen accept recv/send close
client (客户端): socket /*bind*/ connect recv/send close
1、服务器端:
(1)创建socket
socket ,在linux下一切都是文件,socket就是可读、可写、可控制、可关闭的文件描述符。
#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain, int type, int protocol)
domain 参数:系统使用的是哪个底层协议族。TCP/IP协议族,参数设置为PF_INET
UNIX本地域 ,参数设置为PF_UNIX
type参数:指定服务类型 ,服务类型就是流服务或者数据报服务,TCP协议使用流服务SOCK_STREAM,
UDP使用数据报服务SOCK_DGRAM.
protocol参数:是在前面爱那个参数构成的协议下,再选择一个具体的协议。我们一般设置为0,表示使用默 认协议。
函数成功返回一个socket文件描述符,失败返回-1.
(2)bind (绑定)