摘要:大家都知道不同pc間的通信需要用到套接字sockte來(lái)實(shí)現(xiàn),但是服務(wù)器一次只能收到一個(gè)客戶端發(fā)來(lái)的消息,所以為了能讓服務(wù)器可以接收多個(gè)客戶端的連接與消息的傳遞,我們就引入了多進(jìn)程并發(fā)這樣一個(gè)概念。聽(tīng)名字就可以知道--需要用到進(jìn)程,當(dāng)然也有多線程并發(fā)今天我們講進(jìn)程的就可以了,線程的同理。
????????基本原理:?每連接一個(gè)客戶端,創(chuàng)建一個(gè)子進(jìn)程,子進(jìn)程負(fù)責(zé)處理connfd(客戶請(qǐng)求)?
父進(jìn)程處理sockfd(連接請(qǐng)求)。
常用函數(shù):
socket() 創(chuàng)建套接字
bind() 綁定本機(jī)地址和端口
connect() 建立連接
listen() 設(shè)置監(jiān)聽(tīng)套接字
accept() 接受TCP連接
recv(), read(), recvfrom() 數(shù)據(jù)接收
send(), write(), sendto() 數(shù)據(jù)發(fā)送
close(), shutdown() 關(guān)閉套接字
?
各函數(shù)使用方法和參數(shù)返回值:
socket() 創(chuàng)建套接字
int socket (int domain, int type, int protocol);
domain 是地址族
PF_INET // internet 協(xié)議
PF_UNIX // unix internal協(xié)議
PF_NS // Xerox NS協(xié)議
PF_IMPLINK // Interface Message協(xié)議
type // 套接字類型
SOCK_STREAM // 流式套接字
SOCK_DGRAM // 數(shù)據(jù)報(bào)套接字
SOCK_RAW // 原始套接字
protocol 參數(shù)通常置為0
connect() 建立連接
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
返回值:0 或 -1
sockfd : socket返回的文件描述符
serv_addr : 服務(wù)器端的地址信息
addrlen : serv_addr的長(zhǎng)度
bind() 綁定本機(jī)地址和端口文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-582053.html
int bind (int sockfd, struct sockaddr* addr, int addrLen);
sockfd 由socket() 調(diào)用返回
addr 是指向 sockaddr_in 結(jié)構(gòu)的指針,包含本機(jī)IP 地址和端口號(hào)
struct sockaddr_in
????????????????u_short sin_family // protocol family
????????????????u_short sin_port // port number
????????????????struct in_addr sin_addr //IP address (32-bits)
addrLen : sizeof (struct sockaddr_in)
listen() 設(shè)置監(jiān)聽(tīng)套接字文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-582053.html
sockfint listen (int sockfd, int backlog);
sockfd:監(jiān)聽(tīng)連
到了這里,關(guān)于多進(jìn)程并發(fā)TCP服務(wù)器模型(含客戶端)(網(wǎng)絡(luò)編程 C語(yǔ)言實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!