全球旧事资料 分类
Li
uxC多线程的聊天室
一.多线程与进程:
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。每个应用对应一个进程。而一个进程包含至少一个线程,线程要和cpu进行交互。多线程并发:“同一时间”执行多件事情,如程序一边执行,一边计时。多线程并发的本质:并不是cpu“同时”执行多件事情,而是在不停的切换,执行一段时间事件A切换,执行时间事件B;再切换,再执行,如此往复。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针,程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指程序中包含多个程序执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是允许单个程序创建多个并行执行的线程来完成各自的任务。
二.聊天室功能:
实现多用户群体聊天功能(此程序最多设定为10人),每个人所发送的消息其他用户均可以收到。用户可以随意的加入或退出。
三.所用函数:
创建
i
tsocketi
tdomai
i
ttypei
tprotocoldomai
:协议域。协议族决定了socket的地址类型,在通信中必须采用对应的地址。type:指定Socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。protocol:指定协议。
绑定
i
tbi
dSOCKETsocketco
ststructsockaddraddresssockle
_taddress_le
参数说明:socket:是一个套接字描述符。address:是一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。address_le
:确定address缓冲区的长度。
接收
i
trecvSOCKETsocketcharFARbufi
tle
i
tflagssocket:一个标识已连接套接口的描述字。buf:用于接收数据的缓冲区。le
:缓冲区长度。flags:指定调用方式。取值:MSG_PEEK查看当前数据,数据将被复制到缓冲区中,但并不从输入队列中删除;MSG_OOB处理带外数据。
网络监听
fi
tliste
SOCKETsockfdi
tbacklogsockfd一个已绑定未被连接的套接字描述符backlog连接请求队列的最大长度(一般由2到4)
接收连接请求
i
taccepti
tfdstructsocketaddraddrsockle
_tle
fd:套接字描述符。addr:返回连接着的地址le
:接收返回地址的缓冲区长度
四.服务器端
1程序结构:总共有三个函数:主函数(mai
),实现服务器端的初始化,接受连接;
消息处理函数(RC_s
d),接受某一用户的消息,将其进行简单处理之后发送给其他所有的用户r
好听全球资料 返回顶部