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

Socket編程接口API并實(shí)現(xiàn)簡(jiǎn)單的TCP網(wǎng)絡(luò)編程

這篇具有很好參考價(jià)值的文章主要介紹了Socket編程接口API并實(shí)現(xiàn)簡(jiǎn)單的TCP網(wǎng)絡(luò)編程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

#include <sys/types.h>
#include <sys/socket.h>
socket()創(chuàng)建套接字,成功返回套接字的文件描述符,失敗返回-1
domain: 設(shè)置套接字的協(xié)議簇, AF_UNIX AF_INET AF_INET6
type: 設(shè)置套接字的服務(wù)類型 SOCK_STREAM SOCK_DGRAM
protocol: 一般設(shè)置為 0,表示使用默認(rèn)協(xié)議
int socket(int domain, int type, int protocol);


bind()將 sockfd 與一個(gè) socket 地址綁定,成功返回 0,失敗返回-1
sockfd 是網(wǎng)絡(luò)套接字描述符
addr 是地址結(jié)構(gòu)
addrlen 是 socket 地址的長(zhǎng)度
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);


listen()創(chuàng)建一個(gè)監(jiān)聽隊(duì)列以存儲(chǔ)待處理的客戶連接,成功返回 0,失敗返回-1
sockfd 是被監(jiān)聽的 socket 套接字
backlog 表示處于完全連接狀態(tài)的 socket 的上限
int listen(int sockfd, int backlog);


accept()從 listen 監(jiān)聽隊(duì)列中接收一個(gè)連接,成功返回一個(gè)新的連接 socket,
該 socket 唯一地標(biāo)識(shí)了被接收的這個(gè)連接,失敗返回-1
sockfd 是執(zhí)行過 listen 系統(tǒng)調(diào)用的監(jiān)聽 socket
addr 參數(shù)用來獲取被接受連接的遠(yuǎn)端 socket 地址
addrlen 指定該 socket 地址的長(zhǎng)度
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);


connect()客戶端需要通過此系統(tǒng)調(diào)用來主動(dòng)與服務(wù)器建立連接,成功返回 0,失敗返回-1
sockfd 參數(shù)是由 socket()返回的一個(gè) socket。
serv_addr 是服務(wù)器監(jiān)聽的 socket 地址
addrlen 則指定這個(gè)地址的長(zhǎng)度
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);


close()關(guān)閉一個(gè)連接,實(shí)際上就是關(guān)閉該連接對(duì)應(yīng)的 socket
int close(int sockfd);


TCP 數(shù)據(jù)讀寫:
recv()讀取 sockfd 上的數(shù)據(jù),buff 和 len 參數(shù)分別指定讀緩沖區(qū)的位置和大小
send()往 socket 上寫入數(shù)據(jù),buff 和 len 參數(shù)分別指定寫緩沖區(qū)的位置和數(shù)據(jù)長(zhǎng)

flags 參數(shù)為數(shù)據(jù)收發(fā)提供了額外的控制
ssize_t recv(int sockfd, void *buff, size_t len, int flags);
ssize_t send(int sockfd, const void *buff, size_t len, int flags);


UDP 數(shù)據(jù)讀寫:
recvfrom()讀取 sockfd 上的數(shù)據(jù),buff 和 len 參數(shù)分別指定讀緩沖區(qū)的位置和大

src_addr 記錄發(fā)送端的 socket 地址
addrlen 指定該地址的長(zhǎng)度
sendto()往 socket 上寫入數(shù)據(jù),buff 和 len 參數(shù)分別指定寫緩沖區(qū)的位置和數(shù)據(jù)長(zhǎng)

dest_addr 指定接收數(shù)據(jù)端的 socket 地址
addrlen 指定該地址的長(zhǎng)度
ssize_t recvfrom(int sockfd, void *buff, size_t len, int flags,
struct sockaddr* src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, void *buff, size_t len, int flags,
struct sockaddr* dest_addr, socklen_t addrlen);

TCP:面向連接的,可靠的字節(jié)流服務(wù)。

可靠性:應(yīng)答確認(rèn),超時(shí)重傳,去重,亂序重排,滑動(dòng)窗口(進(jìn)行流量控制)

服務(wù)端

Socket編程接口API并實(shí)現(xiàn)簡(jiǎn)單的TCP網(wǎng)絡(luò)編程,網(wǎng)絡(luò),linux,服務(wù)器

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

#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
int main()
{
    int sockfd = socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建套接字
    if(socfd == -1)
    {
        exit(1);
    }
    struct sockaddr_in  saddr;//創(chuàng)建服務(wù)端和客戶端專用地址
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;//地址族
    saddr.sin_port = htons(6000);//端口號(hào)
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");//127.0.0.1相當(dāng)于自己的主機(jī)
    int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));//指定套接字的地址(ip port)
    if(res == -1)
    {
        perror("bind err\n");
    	exit(1);
    }
    listen(sockfd,5);//5的意義:在linux系統(tǒng)上,設(shè)置已完成三次握手的監(jiān)聽隊(duì)列大小  
    while(1)
    {
        struct sockaddr_in  caddr;//accept會(huì)初始化caddr,所以傳參是以指針方式
        int len = sizeof(caddr);
        int c = accept(sockfd,(struct sockaddr*)&caddr,&len);//客戶端的描述符
        if(c<0)
        {
            continue;
        }
        printf("accept c=%d,ip=%s,port=%d\n",c,inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port));//打印客戶端的IP地址和端口
        while(1)
        {
            char buff[128] = {0};
        	int n = recv(c,buff,127,0);//接收數(shù)據(jù)
            if(n<=0)//客戶端關(guān)閉的唯一標(biāo)志返回值等于0
            {
                break;
            }
        	printf("buff=%s\n",buff);
        	send(c,"ok",2,0);//發(fā)送數(shù)據(jù)
        }
        close(c);
    }
    close(sockfd);
    exit(0);
}

客戶端

Socket編程接口API并實(shí)現(xiàn)簡(jiǎn)單的TCP網(wǎng)絡(luò)編程,網(wǎng)絡(luò),linux,服務(wù)器

?

#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>

int main()
{
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd == -1)
    {
        exit(1);
    }
    struct sockaddr_in saddr;
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
    if(res == -1)
    {
        perror("connect err\n");
        exit(1);
    }
    while(1)
    {
        printf("input:\n");
        char buff[128]={0};
    	fgets(buff,128,stdin);
        if(strncmp(buff,"end",3)==0)
        {
            break;
        }
    	send(sockfd,buff,strlen(buff),0);
        memset(buff,0,128);
    	int n=recv(sockfd,buff,127,0);//ok
        if(n<=0)
        {
            break;
        }
    	printf("buff=%s\n",buff);
    }
    close(sockfd);
    exit(0);
}

到了這里,關(guān)于Socket編程接口API并實(shí)現(xiàn)簡(jiǎn)單的TCP網(wǎng)絡(luò)編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(3)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 poll()????????? ?遵

    2024年02月09日
    瀏覽(25)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(10)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 ? ? ? ? 這個(gè)是 RFC 7

    2024年02月08日
    瀏覽(27)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(8)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 ? ? ? ?本文主要描述

    2024年02月08日
    瀏覽(28)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(5)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 connect()?????????

    2024年02月08日
    瀏覽(34)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(11)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 遵循 POSIX.1-2008 ? ? ?

    2024年02月08日
    瀏覽(26)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(2)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 遵循 POSIX.1 - 2008 ? ?

    2024年02月09日
    瀏覽(25)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(4)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 poll()????????? ?遵

    2024年02月09日
    瀏覽(36)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程接口 Socket API 解讀(1)

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 遵循 POSIX.1 - 2001、POS

    2024年02月09日
    瀏覽(35)
  • 【四萬字】網(wǎng)絡(luò)編程接口 Socket API 解讀大全

    ?????????Socket 是網(wǎng)絡(luò)協(xié)議棧暴露給編程人員的 API,相比復(fù)雜的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,API 對(duì)關(guān)鍵操作和配置數(shù)據(jù)進(jìn)行了抽象,簡(jiǎn)化了程序編程。 ? ? ? ? 本文講述的 socket 內(nèi)容源自 Linux man。本文主要對(duì)各 API 進(jìn)行詳細(xì)介紹,從而更好的理解 socket 編程。 遵循 POSIX.1 - 2001、POS

    2024年02月08日
    瀏覽(23)
  • 【網(wǎng)絡(luò)編程】(TCP流套接字編程 ServerSocket API Socket API 手寫TCP版本的回顯服務(wù)器 TCP中的長(zhǎng)短連接)

    【網(wǎng)絡(luò)編程】(TCP流套接字編程 ServerSocket API Socket API 手寫TCP版本的回顯服務(wù)器 TCP中的長(zhǎng)短連接)

    TCP提供的API主要是兩個(gè)類:ServerSocket 和 Socket . TCP不需要一個(gè)類來表示\\\"TCP數(shù)據(jù)報(bào)\\\"因?yàn)門CP不是以數(shù)據(jù)報(bào)為單位進(jìn)行傳輸?shù)?是以字節(jié)的方式,流式傳輸 ServerSocket API ServerSocket 是專門給服務(wù)器使用的Socket對(duì)象. ServerSocket 構(gòu)造方法: ServerSocket(int port) 創(chuàng)建一個(gè)服務(wù)端流套接字Socket,并綁

    2024年02月12日
    瀏覽(34)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包