文章目录
- 系列文章目录
- 前言
- 一.什么是服务器,什么又是客户端?
- 二.UDP服务器与客户端。
- 1..服务器
- 2..客户端
- 总结
前言
服务器端(Server) 是为客户端(Client)服务的,服务的内容诸如向客户端提供资源,保存客户端数据等等.客户端可以是任意的一台电脑,只要它和服务器端存在连接,并且得到了服务器端的授权,就可以使用服务器端的服务
一、什么是服务器,什么又是客户端?
客户端:客户也就是你,客服端也就是你这一端可以接触到的程序,手机app,web网页等,我们可以在客户端的界面上向服务器发送请求以及数据,交给服务器处理
服务端:也就是提供为客户端提供“服务”,接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端。
我们在聊天时,发送给对方的信息就是通过服务端间接转发的,客户端与客户端之间并没有直接交互。而且服务端也会有专门的算法对发送过来的信息进行检测。
二、UDP服务器与客户端。
UDP的服务器与客户端面向的是无连接类型,不保证可靠性,但保证了效率的高效性。是属于传输层的协议。
1.服务器
会话开始等待的进程就是服务端。
那怎样来创建一个服务器呢?
第一步:我们需要来建立一个套接字
socket()
在linux中一切皆文件,为了表示和区分已经打开的文件,UNIX/Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。
网络连接也是一个文件,它也有文件描述符。
我们可以通过 socket() 函数来创建一个网络连接,或者说打开一个网络文件,socket() 的返回值就是文件描述符。有了文件描述符,我们就可以使用普通的文件操作函数来传输数据了。
要用 socket() 创建了连接,剩下的就是文件操作了。
socket()(示例):
int socket(int domain,int type,int protocol);
//domain:协议族,一般我们这里用AF_INET协议。
//type:套接字类型,这里我们分为2种类型,SOCK_STREAM/SOCK_PGRAM(流式套接字/数据段套接字)我们这里要用到的就是数据段套接字。
//protocol:IPPROTO_UDP,这里我们可以直接写0代替,系统默认会帮我们补上。
//socket的返回值就是一个文件描述符。
第二步:绑定地址。
在建立套接字后,我们就需要绑定地址,当然你要想不写也可以。
bind()
bind()(示例):
int bind(int sockfd,const struct sockaddr *addr,soklen_t addrlen)
//sockfd:文件描述符
//addr:指的struct sockaddr *结构体,这个结构体不用我们自己写,系统中有。
//addrlen:结构体长度。
第三步:数据的接收与发送
recvfrom()接收
sockaddr()发送
recvfrom()接收(示例):
sockaddr()发送(示例):
ssize_t recvfrom(int sockfd,void *buf,size_t len,int flag,struct sockaddr *str,socklen *addrlen)
//buf:接收区缓存地址
//len:buf的长度,缓冲区大小。
//flag:标志位默认为0.
//str:保存发送端(客户端)地址结构的指针,不需要时可置NULL。
//addrlen:保持地址结构的长度的指针,不需要时可置NULL。
ssize_t sendto(int sockfd,void *buf,size_t len,int flag,const struct sockaddr *str,socklen addrlen)
2.客户端
与服务端差不多,先创建套接字,在绑定地址(可忽略,绑定的话得再来个结构体来保存服务器地址IP与PORT号),最后就是数据的接收与发送
代码如下(示例):
总结
这里只是浅浅的说了一下UDP服务器与客户端的使用,只是最基本的使用罢了,其他的还有TCP服务器与客户端,多线程,多进程,IO多路复用等更深入的知识。此处时间有限就不一一叙述。