国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IO模型之epoll實現(xiàn)服務(wù)器客戶端收發(fā)

這篇具有很好參考價值的文章主要介紹了IO模型之epoll實現(xiàn)服務(wù)器客戶端收發(fā)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?epoll.ser


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/epoll.h>

#define ERR_MSG(msg)                  \
	{                                 \
		printf("__%d__\n", __LINE__); \
		perror(msg);                  \
	}
#define IP "192.168.250.100"
#define PORT 12345

int main(int argc, const char *argv[])
{
	struct epoll_event event;
	struct epoll_event events[10]; // 存放就緒事件描述符的數(shù)組

	// 創(chuàng)建流式套接字
	int sfd = socket(AF_INET, SOCK_STREAM, 0);
	if (sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}
	printf("socket success\n");

	// 允許端口快速被復用
	int reuse = 1;
	if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
	{
		ERR_MSG("setsockopt");
		return -1;
	}

	// 綁定服務(wù)器的IP和端口
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);

	if (bind(sfd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
	{
		ERR_MSG("bind");
		return -1;
	}
	printf("bind success\n");

	// 將套接字設(shè)置為被動監(jiān)聽狀態(tài)
	if (listen(sfd, 128) < 0)
	{
		ERR_MSG("listen");
		return -1;
	}
	printf("listen success\n");

	// 獲取鏈接成功后的套接字,拿到文件描述符
	struct sockaddr_in cin;
	struct sockaddr_in savecin[1024];
	socklen_t len = sizeof(cin);
	char s[128] = "";
	char s1[128] = "";
	ssize_t res = 0;
	int num;
	int newfd, epfd;

	epfd = epoll_create(1);
	if (epfd < 0)
	{
		printf("epoll_create filed\n");
		exit(-1);
	}

	// 將套接字添加到紅黑樹
	event.events = EPOLLIN;
	event.data.fd = sfd;
	if (epoll_ctl(epfd, EPOLL_CTL_ADD, sfd, &event) < 0)
	{
		printf("epoll_ctl add filed\n");
	}

	while (1)
	{
		int i;
		int ret = epoll_wait(epfd, events, 10, -1);
		if (ret < 0)
		{
			printf("epoll_wait filed\n");
			exit(-1);
		}

		for (i = 0; i < ret; i++)
		{
			if (events[i].data.fd == sfd) // 套接的文件描述符 來客戶端了
			{
				newfd = accept(sfd, (struct sockaddr *)&cin, &len);
				if (newfd < 0)
				{
					ERR_MSG("accept");
					return -1;
				}
				bzero(s1, sizeof(s1));
				printf("客戶端連接成功\n");

				savecin[newfd] = cin;
				// 添加準備就緒事件進入epoll;
				event.events = EPOLLIN; // 讀事件
				event.data.fd = newfd;
				if (epoll_ctl(epfd, EPOLL_CTL_ADD, newfd, &event) < 0)
				{
					printf("epoll_ctl add filed\n");
				}
			}
			else
			{
				if (events[i].events & EPOLLIN)
				{
					int fd1 = events[i].data.fd;
					bzero(s, sizeof(s));
					res = recvfrom(events[i].data.fd, s, sizeof(s), 0, NULL, NULL);
					if (0 == res)
					{
						printf("客戶端關(guān)閉\n");
						close(i);
						if (epoll_ctl(epfd, EPOLL_CTL_DEL, fd1, &event) < 0)
						{
							printf("epoll_ctl sub filed\n");
						}
					}
					else if (res < 0)
					{
						ERR_MSG("recv");
						return -1;
					}
					printf("接收到的內(nèi)容是:%s\n", s);
					printf("請輸入要發(fā)送的內(nèi)容:");

					scanf("%s", s1);
					if (write(events[i].data.fd, s1, sizeof(s1)) < 0)
					{
						ERR_MSG("write");
					}
					printf("發(fā)送成功\n");
				}
			}
		}
	}

	if (close(sfd) < 0)
	{
		ERR_MSG("close");
		return -1;
	}
	return 0;
}

epoll.cri

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/epoll.h>

#define ERR(msg)                      \
	{                                 \
		printf("__%d__\n", __LINE__); \
		perror(msg);                  \
		return -1;                    \
	}
#define PORT 12345
#define IP "192.168.250.100"

int main(int argc, const char *argv[])
{
	
	//  創(chuàng)建套接字
	int fd = socket(AF_INET, SOCK_STREAM, 0);
	if (fd < 0)
	{
		ERR("socket");
	}
	printf("socket success\n");

	// 連接服務(wù)器
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);
	socklen_t len = sizeof(sin);

	if (connect(fd, (struct sockaddr *)&sin, len) < 0)
	{
		ERR("connect");
	}
	printf("connect success\n");

	// 讀取數(shù)據(jù)
	char s[128] = "";
	char s1[128] = "";
	ssize_t res = 0;
	int num;

	while (1)
	{
		printf("請輸入要發(fā)送的內(nèi)容:");
		
		scanf("%s", s1);
		if (write(fd, s1, sizeof(s1)) < 0)
		{
			ERR("write");
		}
		printf("發(fā)送成功\n");
		res = recvfrom(fd, s, sizeof(s), 0, NULL, NULL);
		printf("接收的內(nèi)容:%s\n",s);
	}

	if (close(fd) < 0)
	{
		ERR("close");
	}

	return 0;
}

result

?IO模型之epoll實現(xiàn)服務(wù)器客戶端收發(fā),服務(wù)器,算法,運維

?文章來源地址http://www.zghlxwxcb.cn/news/detail-645640.html

?

到了這里,關(guān)于IO模型之epoll實現(xiàn)服務(wù)器客戶端收發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【TCP服務(wù)器的演變過程】使用IO多路復用器epoll實現(xiàn)TCP服務(wù)器

    【TCP服務(wù)器的演變過程】使用IO多路復用器epoll實現(xiàn)TCP服務(wù)器

    手把手教你從0開始編寫TCP服務(wù)器程序,體驗開局一塊磚,大廈全靠壘。 為了避免篇幅過長使讀者感到乏味,對【TCP服務(wù)器的開發(fā)】進行分階段實現(xiàn),一步步進行優(yōu)化升級。 本節(jié),在上一章節(jié)的基礎(chǔ)上,將IO多路復用機制select改為更高效的IO多路復用機制epoll,使用epoll管理每

    2024年01月17日
    瀏覽(17)
  • Linux多路IO復用技術(shù)——epoll詳解與一對多服務(wù)器實現(xiàn)

    Linux多路IO復用技術(shù)——epoll詳解與一對多服務(wù)器實現(xiàn)

    本文詳細介紹了Linux中epoll模型的優(yōu)化原理和使用方法,以及如何利用epoll模型實現(xiàn)簡易的一對多服務(wù)器。通過對epoll模型的優(yōu)化和相關(guān)接口的解釋,幫助讀者理解epoll模型的工作原理和優(yōu)缺點,同時附帶代碼實現(xiàn)和圖解說明。

    2024年02月05日
    瀏覽(27)
  • QT實現(xiàn)tcp服務(wù)器客戶端
  • TCP實現(xiàn)服務(wù)器和客戶端通信

    TCP實現(xiàn)服務(wù)器和客戶端通信

    目錄 TCP介紹 代碼實現(xiàn) server(服務(wù)器端) 代碼分析 client(客戶端) 代碼分析 結(jié)果展示 TCP (Transmission Control Protocol) 是一種面向連接的協(xié)議,用于在計算機網(wǎng)絡(luò)中傳輸數(shù)據(jù)。TCP 可以確保數(shù)據(jù)的可靠傳輸,即使在網(wǎng)絡(luò)環(huán)境不穩(wěn)定的情況下也能夠保證數(shù)據(jù)的完整性和順序。以下是

    2024年02月15日
    瀏覽(39)
  • Qt實現(xiàn)客戶端與服務(wù)器消息發(fā)送

    Qt實現(xiàn)客戶端與服務(wù)器消息發(fā)送

    里用Qt來簡單設(shè)計實現(xiàn)一個場景,即: (1)兩端:服務(wù)器QtServer和客戶端QtClient (2)功能:服務(wù)端連接客戶端,兩者能夠互相發(fā)送消息,傳送文件,并且顯示文件傳送進度。 環(huán)境:VS20013 + Qt5.11.2 + Qt設(shè)計師 先看效果: 客戶端與服務(wù)器的基本概念不說了,關(guān)于TCP通信的三次握

    2024年02月11日
    瀏覽(23)
  • TCP通信實現(xiàn)客戶端向服務(wù)器發(fā)送圖片

    TCP通信實現(xiàn)客戶端向服務(wù)器發(fā)送圖片

    TCP通信: 1. TCP 協(xié)議通信交互流程: 具體的流程如下: (1)服務(wù)器根據(jù)地址類型(ipv4、ipv6)、socket 類型、協(xié)議創(chuàng)建 socket. (2)服務(wù)器為 socket 綁定 ip 地址和端口號。 (3)服務(wù)器 socket 監(jiān)聽端口號的請求,隨時準備接受來自客戶端的連接,此時服務(wù)器的 socket 處于關(guān)閉狀態(tài)

    2024年02月13日
    瀏覽(32)
  • 【網(wǎng)絡(luò)編程】實現(xiàn)UDP/TCP客戶端、服務(wù)器

    【網(wǎng)絡(luò)編程】實現(xiàn)UDP/TCP客戶端、服務(wù)器

    需要云服務(wù)器等云產(chǎn)品來學習Linux的同學可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、UDP 1、Linux客戶端、服務(wù)器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客戶端 二、T

    2024年02月06日
    瀏覽(19)
  • QT實現(xiàn)TCP通信(服務(wù)器與客戶端搭建)

    QT實現(xiàn)TCP通信(服務(wù)器與客戶端搭建)

    創(chuàng)建一個QTcpServer類對象,該類對象就是一個服務(wù)器 調(diào)用listen函數(shù)將該對象設(shè)置為被動監(jiān)聽狀態(tài),監(jiān)聽時,可以監(jiān)聽指定的ip地址,也可以監(jiān)聽所有主機地址,可以通過指定端口號,也可以讓服務(wù)器自動選擇 當有客戶端發(fā)來連接請求時,該服務(wù)器會自動發(fā)射一個newConnection信號

    2024年02月09日
    瀏覽(27)
  • Socket實現(xiàn)服務(wù)器和客戶端(手把手教會)

    Socket實現(xiàn)服務(wù)器和客戶端(手把手教會)

    ?? 作者介紹:我是程序員行者孫,一個熱愛分享技術(shù)的制能工人。計算機本碩,人工制能研究生。公眾號:AI Sun,視頻號:AI-行者Sun ?? 本文專欄:本文收錄于《網(wǎng)絡(luò)編程實戰(zhàn)》系列專欄,相信一份耕耘一份收獲,我會手把手教分享網(wǎng)絡(luò)編程實戰(zhàn)內(nèi)容,屆時可以拳打字節(jié),

    2024年04月12日
    瀏覽(34)
  • 多路IO—POll函數(shù),epoll服務(wù)器開發(fā)流程

    多路IO—POll函數(shù),epoll服務(wù)器開發(fā)流程

    \\\"在計算機網(wǎng)絡(luò)編程中,多路IO技術(shù)是非常常見的一種技術(shù)。其中,Poll函數(shù)和Epoll函數(shù)是最為常用的兩種多路IO技術(shù)。這兩種技術(shù)可以幫助服務(wù)器端處理多個客戶端的并發(fā)請求,提高了服務(wù)器的性能。本文將介紹Poll和Epoll函數(shù)的使用方法,并探討了在服務(wù)器開發(fā)中使用這兩種技

    2024年02月06日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包