1.TCP數(shù)據(jù)讀寫(xiě)
定義:socket是連接用戶(hù)空間和內(nèi)核空間,TCP和UDP是內(nèi)核第一層。
解釋?zhuān)簩?duì)于文件的read和write同樣適用于socket
例子:對(duì)于TCP流數(shù)據(jù)的系統(tǒng)調(diào)用
1.1ssize_t recv(int sockfd,void buf,size_t len,int flags);
1.2ssize_t send(int sockfd,const void
buf,size_t len,int flags);

參數(shù)解釋?zhuān)?br />1.3buf和len是指緩存區(qū)的位置和大小
1.3.1flags通常為0
recv成功返回實(shí)際讀取到的數(shù)據(jù)的長(zhǎng)度
注:實(shí)際讀取的長(zhǎng)度可能小于期望len,所以要多次調(diào)用recv
recv可能返回0,意味著通信對(duì)方已經(jīng)關(guān)閉了連接
recv出錯(cuò)返回-1并設(shè)置errno

1.4send基本上同上
發(fā)送的實(shí)例代碼

        int  main(int argc, char *argv[]){
                if(argc<=2){
                        printf(參數(shù)是錯(cuò)誤);
                }

            //一系列之前的連接
            if(connect(sockfd,(struct sockaddr*) &server_address,sizeof(server_address))<0){
                    printf(連接失敗);
            }else{
                    const  char* oob_data = abc;

                    const  char* normal_data = 123;

                    send(sockfd,normal_data,strlen(normal_data),0);

                    sned(sockefd,oob_data,strlen(oob_data).MSG_OOB);
                    send(sockfd,normal_data,strlen(normal_data),0);

            }
            close(sockfd);
            return 0;

        }

        //接收代碼也是類(lèi)似的
        //連接成功
        int  connfd = accept(sock,(struct  sockaddr *) &client,&client_addrlength);
        char  buffer[BUF_SIZE];

        memset(buffer,\\\'\\\\0\\\',BUF_SIZE);

        ret = recv(connfd,buffer,BUF_SIZE-1,0);

        close(connfd);
        close(sock);
        return 0;

        ./testoobrecv  192.168.1.109  54321

        ./testoobsend  192.168.1.109  54321  

        tcpdump  -ntx -i eth0  port 54321

        注:flags參數(shù)只對(duì)send和recv的當(dāng)前調(diào)用生效,可以使用setsockket系統(tǒng)調(diào)用來(lái)永久性修改socket的某些屬性

更多關(guān)于云服務(wù)器域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)三五互聯(lián)官網(wǎng):www.shinetop.cn

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。郵箱:3140448839@qq.com。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處:三五互聯(lián)知識(shí)庫(kù) » linux高性能網(wǎng)絡(luò)編程讀書(shū)筆記之socket數(shù)據(jù)讀寫(xiě)

登錄

找回密碼

注冊(cè)