服務器本地搭建

socket函數

它用于創建一個新的套接字(socket)。

函數原型
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
參數解釋

domain:它指定了通信所使用的協議族,常見的取值如下:

????????AF_INET:代表 IPv4 協議。

????????AF_INET6:代表 IPv6 協議。

????????AF_UNIXAF_LOCAL:用于本地(Unix 域)套接字通信。

type:它指定了套接字的類型,常用的類型有:

????????SOCK_STREAM:表示面向連接的、可靠的 TCP 套接字。

????????SOCK_DGRAM:表示無連接的、不可靠的 UDP 套接字。

????????SOCK_RAW:允許程序直接訪問底層協議,如 IP、ICMP 等。

protocol:通常設置為 0,表示讓系統根據domaintype自動選擇合適的協議。

返回值

????????若函數調用成功,會返回一個新的套接字描述符(非負整數),后續的網絡操作會用到這個描述符。

????????若調用失敗,會返回 -1,并設置errno來指示具體的錯誤原因。

示例

#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>using namespace std;int main()
{// 初始化網絡 int socketfd = socket(AF_INET, SOCK_STREAM, 0);if (socketfd < 0){/*可能情況 *1、沒有連接網絡		*2、網卡壞了*/perror("socket error");}else{cout << "服務器網絡初始化 socketfd=" << socketfd << endl;}return 0;
}

?結果

?bind函數

????????用于將一個套接字(socket)與特定的網絡地址和端口號綁定在一起。

函數原型
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
參數解釋

????????sockfd:這是由socket函數返回的套接字描述符,代表要進行綁定操作的套接字。

????????addr:指向一個sockaddr類型的結構體指針,該結構體包含了要綁定的地址和端口信息。不過在實際使用中,通常會使用具體的地址結構體,如struct sockaddr_in(用于 IPv4)或struct sockaddr_in6(用于 IPv6),然后進行強制類型轉換。

????????addrlen:表示addr所指向的結構體的長度。

補(struct sockaddr_in):

#include <netinet/in.h>struct sockaddr_in {sa_family_t    sin_family;  // 地址族,通常是 AF_INET(IPv4)in_port_t      sin_port;    // 端口號,使用網絡字節序(大端序)(服務器系統默認IP地址:INADDR_ANY)struct in_addr sin_addr;    // IPv4 地址,使用網絡字節序unsigned char  sin_zero[8]; // 填充字段,使其大小與 struct sockaddr 相同,一般設置為全 0
};

返回值

????????若綁定成功,返回 0。

????????若失敗,返回 -1,并設置errno來指示具體的錯誤原因。

listen函數

????????主要用于將一個套接字(socket)設置為監聽狀態,以便接收客戶端的連接請求。?

函數原型
#include <sys/socket.h>
int listen(int sockfd, int backlog);
參數解釋

????????sockfd:這是一個由socket函數返回的套接字描述符,代表要設置為監聽狀態的套接字。該套接字必須已經通過bind函數綁定到了一個特定的地址和端口。

????????backlog:指定了允許在隊列中等待處理的最大連接請求數量。當有多個客戶端同時發起連接請求時,服務器無法立即處理所有請求,這些請求會被放入一個隊列中等待處理。backlog的值決定了這個隊列的最大長度。不同系統對backlog的最大值有不同的限制,一般來說,常見的值可以設置為 5 或 10

返回值

????????若函數調用成功,返回 0。

????????若調用失敗,返回 -1,并設置errno來指示具體的錯誤原因。

accept函數?

????????主要用于服務器端,它會讓服務器處于阻塞狀態,等待客戶端的連接請求。一旦接收到客戶端的連接請求,accept函數就會返回一個新的套接字描述符,這個描述符用于和客戶端進行數據通信。而原來的套接字描述符依舊負責監聽新的連接請求。

函數原型
#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
參數解釋

????????sockfd:這是一個已經處于監聽狀態的套接字描述符,它是通過socket()創建,再由bind()綁定地址和端口,最后使用listen()開始監聽的套接字。

????????addr(前面設置過的化一般為NULL):這是一個指向sockaddr結構體的指針,該結構體用于存儲客戶端的地址信息。在實際使用時,通常會使用sockaddr_in(用于 IPv4)或sockaddr_in6(用于 IPv6)結構體,然后進行類型轉換。

????????addrlen(前面設置過的化一般為NULL):這是一個指向socklen_t類型的指針,它表示addr所指向的結構體的長度。在調用accept之前,需要將其初始化為addr結構體的大小;調用完成后,該指針指向的值會被更新為實際存儲的客戶端地址信息的長度。

返回值

????????若調用成功,accept會返回一個新的套接字描述符,此描述符用于和客戶端進行數據通信。原來的sockfd仍然用于監聽新的連接請求。

????????若調用失敗,會返回 -1。

整合示例

#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>using namespace std;int main()
{struct sockaddr_in addr;int length = 0;int acceptfd = 0;// 初始化網絡 int socketfd = socket(AF_INET, SOCK_STREAM, 0);if (socketfd < 0){/*可能情況 *1、沒有連接網絡		*2、網卡壞了*/perror("socket error");return 0;}else{addr.sin_family = AF_INET;// 服務器系統默認IP地址addr.sin_addr.s_addr = INADDR_ANY;addr.sin_port = htons(10001);length = sizeof(addr);// 綁定端口號if (bind(socketfd, (struct sockaddr*)(&addr), length) == -1){perror("bind error");return 0;}// 監聽這個文件描述符,是否有客戶端來連接if (listen(socketfd, 10) == -1){perror("lister error");return 0;}cout << "服務器網絡搭建成功" << endl;// 因為服務器24h長時間開機while (1){// acceptfd代表已經連接成功的客戶端// 阻塞式函數(等待客戶端的到來)acceptfd = accept(socketfd, NULL, NULL);cout << "客戶端上線,acceptfd=" << acceptfd << endl;}}return 0;
}

結果?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75866.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MIP-Splatting:全流程配置與自制數據集測試【ubuntu20.04】【2025最新版】

一、引言 在計算機視覺和神經渲染領域&#xff0c;3D場景重建與渲染一直是熱門研究方向。近期&#xff0c;3D高斯散射&#xff08;3D Gaussian Splatting&#xff09;因其高效的渲染速度和優秀的視覺質量而受到廣泛關注。然而&#xff0c;當處理大型復雜場景時&#xff0c;這種…

Redis 高可用集群搭建與優化實踐

在分布式系統中,緩存技術用于提升性能和響應速度。 Redis 作為一款高性能的鍵值存儲系統,廣泛應用于緩存、消息隊列和會話管理等場景。隨著業務規模的擴大,單機 Redis 的性能和可用性逐漸無法滿足需求。 因此,搭建高可用的 Redis 集群可以解決這一問題。我將詳細介紹 Red…

專題十五:動態路由——BGP

一、BGP的基本概念 BGP&#xff08;Border Gateway Protocol&#xff0c;邊界網關協議&#xff09;是一種用于在不同自治系統&#xff08;AS&#xff09;之間交換路由信息的外部網關協議&#xff08;EGP&#xff09;。通過TCP179端口建立連接。目前采用BGP4版本&#xff0c;IP…

【Flask開發】嘿馬文學web完整flask項目第4篇:4.分類,4.分類【附代碼文檔】

教程總體簡介&#xff1a;2. 目標 1.1產品與開發 1.2環境配置 1.3 運行方式 1.4目錄說明 1.5數據庫設計 2.用戶認證 Json Web Token(JWT) 3.書架 4.1分類列表 5.搜索 5.3搜索-精準&高匹配&推薦 6.小說 6.4推薦-同類熱門推薦 7.瀏覽記錄 8.1配置-閱讀偏好 8.配置 9.1項目…

在Mac上離線安裝k3s

目錄 首先是安裝multipass。 1. 系統要求 2. 環境準備 本來想照著網上文檔學習安裝一下k3s&#xff0c;沒想到在docker被封了之后&#xff0c;現在想通過命令行去下載github的資源也不行了&#xff08;如果有網友看到這個文檔、并且知道問題原因的&#xff0c;請留言告知&am…

vscode+wsl 運行編譯 c++

linux 的 windows 子系統&#xff08;wsl&#xff09;是 windows 的一項功能&#xff0c;可以安裝 Linux 的發行版&#xff0c;例如&#xff08;Ubuntu&#xff0c;Kali&#xff0c;Arch Linux&#xff09;等&#xff0c;從而可以直接在 windows 下使用 Linux 應用程序&#xf…

基于源碼分析 HikariCP 常見參數的具體含義

HikariCP 是目前風頭最勁的 JDBC 連接池&#xff0c;號稱性能最佳&#xff0c;SpringBoot 2.0 也將 HikariCP 作為默認的數據庫連接池。 要想用好 HikariCP&#xff0c;理解常見參數的具體含義至關重要。但是對于某些參數&#xff0c;盡管官方文檔給出了詳細解釋&#xff0c;很…

docker部署scylladb

創建存儲數據的目錄和配置目錄 mkdir -p /root/docker/scylla/data/data /root/docker/scylla/data/commitlog /root/docker/scylla/data/hints /root/docker/scylla/data/view_hints /root/docker/scylla/conf快速啟動拷貝配置文件 docker run -d \--name scylla \scylladb/…

golang 在windows 系統的交叉編譯

基本交叉編譯命令 GOOS目標操作系統 GOARCH目標架構 go build -o 輸出文件名 包路徑 編譯 Linux 64位程序 set GOOSlinux set GOARCHamd64 go build -o myapp-linux main.go 編譯 MacOS (Darwin) 64位程序 set GOOSdarwin set GOARCHamd64 go build -o myapp-macos main.go …

本地mock服務編寫

確認有需要mock的接口文檔后&#xff0c;本地可以mock服務編寫&#xff1b; 用于測試UI事務、模擬對接組件等&#xff1b; 使用python FLASK可以輕松建立本地mock服務端&#xff0c;注冊預期的接口響應&#xff01;flask會在接收端持續打印收到的請求&#xff01; 注意&#…

京東云智能體平臺joybuilder v3.0.0測試

平臺介紹&#xff1a; JoyBuilder 是京東云推出的 AI 原生應用開發平臺&#xff0c;以下是對它的具體介紹&#xff1a; 開發方式便捷高效&#xff1a;將 AI 能力融入低代碼平臺&#xff0c;用戶通過對話式交互方式&#xff0c;輸入如 “創建客戶反饋管理系統” 等需求&#x…

前端實現對接現成文件下載接口(xlsx)

針對于Ant Design 框架 1.在你的api文件下編寫接口路徑 import request from /utils/request import storage from storeimport {AUTHORIZATION} from /store/mutation-types const api {downloadVocabularyTemplate:/vocabulary/downloadVocabularyTemplate, }export funct…

TCPIP詳解 卷1協議 六 DHCP和自動配置

6.1——DHCP和自動配置 為了使用 TCP/IP 協議族&#xff0c;每臺主機和路由器需要一定的配置信息。基本上采用3種方法&#xff1a;手工獲得信息&#xff1b;通過一個系統獲得使用的網絡服務&#xff1b;使用某種算法自動確定。 擁有一個IP 地址和子網掩碼&#xff0c;以及 DN…

聯想電腦開機出現Defalut Boot Device Missing or Boot Failed怎么辦

目錄 一、恢復bios默認設置 二、關機重啟 三、“物理”方法 在圖書館敲代碼時&#xff0c;去吃了午飯回來發現剛開機就出現了下圖的問題&#xff08;崩潰&#xff09;&#xff0c;想起之前也發生過一次 這樣的問題&#xff0c;現在把我用到的方法寫在下面&#xff0c;可能對…

用戶登陸UI

本節任務 完成用戶登陸UI&#xff0c;點擊登陸按鈕跳轉到應用主頁 界面原型&#xff1a; 登陸頁面&#xff1a; 登陸成功頁面&#xff1a; 涉及知識點&#xff1a; 線性布局Image組件輸入框復選框分割線按鈕路由跳轉背景色、內容對齊 1 新建項目 錄入項目信息&#xff1a;…

linux多線(進)程編程——(1)前置知識

liunx多線程編程&#xff08;前置知識&#xff09;前置知識 前言 學習編程就像是修仙&#xff0c;分為宗門的正統修士&#xff08;計算機專業的學生&#xff09;&#xff0c;以及野修&#xff08;半路轉碼&#xff09;。正統修士有各大宗門的功法&#xff0c;保證一路修行暢通…

Npfs!NpFsdCreate函數分析之從NpCreateClientEnd函數分析到Npfs!NpSetConnectedPipeState

第一部分&#xff1a; 1: kd> g Breakpoint 5 hit Npfs!NpFsdCreate: baaecba6 55 push ebp 1: kd> kc # 00 Npfs!NpFsdCreate 01 nt!IofCallDriver 02 nt!IopParseDevice 03 nt!ObpLookupObjectName 04 nt!ObOpenObjectByName 05 nt!IopCreateFile 06…

【軟件測試】bug 篇

本章思維導圖&#xff1a; 1. 軟件測試的生命周期 軟件測試貫穿于整個軟件的生命周期 流程階段需求分析測試計劃測試設計/開發測試執行測試評估上線運行維護具體工作內容1. 閱讀需求文檔 2. 標記可測試需求 3. 確定測試類型1. 制定測試范圍 2. 選擇測試工具 3. 分配資源1. 編寫…

「Unity3D」圖片導入選項取消Read/Write,就無法正確顯示導入大小,以及Addressable打包無法正確顯示的問題

如果在Edit -> Project Settings -> Editor中的“Load texture data on demand”勾選&#xff0c;就會讓圖片導入設置中&#xff0c;不勾選Read/Write&#xff0c;就無法正確顯示紋理的大小數字。 更進一步的問題是&#xff0c;使用Addressable打包的時候&#xff0c; 如…

《MySQL從入門到精通》

文章目錄 《MySQL從入門到精通》1. 基礎-SQL通用語法及分類2. 基礎-SQL-DDL-數據庫操作3. 基礎-SQL-DDL-表操作-創建&查詢4. 基礎-SQL-DDL-數據類型及案例4.1 數值類型4.2 字符串類型4.3 時間和日期類型 5. 基礎-SQL-DDL-表操作-修改&刪除5.1 DDL-表操作-修改5.2 DDL-表…