這篇文章主要講解了“C++怎么實(shí)現(xiàn)socket服務(wù)端與客戶端通信”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++怎么實(shí)現(xiàn)socket服務(wù)端與客戶端通信”吧!
臺州網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,臺州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為臺州上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的臺州做網(wǎng)站的公司定做!
一、 服務(wù)端:
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char const *argv[]) {
// 1. 創(chuàng)建socket連接
int sock = socket(AF_INET, SOCK_STREAM, 0);
// 2. 初始化網(wǎng)絡(luò)結(jié)構(gòu)體
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(11115);
addr.sin_addr.s_addr = INADDR_ANY;
// 3. 設(shè)置端口可重復(fù)使用
int flag = 1, fd = -1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
// 4. 綁定端口
int ret = bind(sock, (struct sockaddr*)&addr, sizeof(addr));
if(ret < 0)
{
perror("bind err");
close(sock);
return -1;
}
// 5. 監(jiān)聽端口
listen(sock, 10);
fd_set read_fdsets;
while(true)
{
// 6. 客戶端過來建立連接
int newfd = accept(sock, NULL, NULL);
// 7. 接收客戶端的數(shù)據(jù)
char buf[1024 + 1] = {0};
// 使用select 多路復(fù)用接收消息
FD_ZERO(&read_fdsets); // 清空fdset與所有文件句柄的聯(lián)系
FD_SET(newfd, &read_fdsets); // 建立文件句柄fd與fdset的聯(lián)系
struct timeval stOut;
stOut.tv_sec = 10;
stOut.tv_usec = 0;
ret = select(newfd + 1, &read_fdsets, NULL, NULL, &stOut);
if(ret > 0) // fd 有改變
{
if(FD_ISSET(newfd, &read_fdsets))
{
memset(buf, 0, sizeof(buf));
ret = recv(newfd, buf, sizeof(buf), 0);
if(ret < 0)
{
perror("select recv error");
exit(-1);
}
printf("[select] newfd = %d, recv buf = %s\n", newfd, buf);
}
}
else if(ret == 0) // 客戶端連接之后沒有發(fā)消息,超時
puts("timeout.");
else
puts("select socket error.");
}
return 0;
}
二、客戶端
#include
#include
#include
#include
#include
int main(int argc, char const *argv[]) {
// 1. 創(chuàng)建socket連接
int sock = socket(AF_INET, SOCK_STREAM, 0);
// 2. 初始化網(wǎng)絡(luò)結(jié)構(gòu)體
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(11115);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 3. 連接服務(wù)器
connect(sock, (struct sockaddr*)&addr, sizeof(addr));
// 4. 發(fā)送數(shù)據(jù)
char sendBuf[1024 + 1] = "hello server, im client.";
sleep(12);
send(sock, sendBuf, sizeof(sendBuf), 0);
// 5. 關(guān)閉連接
close(sock);
return 0;
}
感謝各位的閱讀,以上就是“C++怎么實(shí)現(xiàn)socket服務(wù)端與客戶端通信”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C++怎么實(shí)現(xiàn)socket服務(wù)端與客戶端通信這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!