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

TCP/IP 網(wǎng)絡(luò)編程 第七章:優(yōu)雅地斷開套接字連接

這篇具有很好參考價值的文章主要介紹了TCP/IP 網(wǎng)絡(luò)編程 第七章:優(yōu)雅地斷開套接字連接。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基于TCP的半關(guān)閉

在前面的章節(jié)中,我們都是通過close或者closesocket來斷開套接字連接的,但是調(diào)用這兩個函數(shù)導(dǎo)致我們套接字完全斷開,套接字將無法接受數(shù)據(jù),并且也只能傳輸完最后余留在緩沖區(qū)的數(shù)據(jù)內(nèi)容。此時"只關(guān)閉一部分?jǐn)?shù)據(jù)交換中使用的流"的方法應(yīng)運而生。

針對優(yōu)雅斷開的shutdown函數(shù)

#include<sys/socket.h>
int shutdown(int sock,int howto);//成功時返回0,失敗時返回-1
    sock    //需要半斷開的文件描述符、
    howto   //進行半斷開的方式

此函數(shù)的第二個參數(shù)可能是下面之一:

1.SHUT_RD//斷開輸入流

2.SHUT_WR//斷開輸出流

3.SHUT_RDWR//同時斷開IO流

為何需要半關(guān)閉

試想一個場景,在客戶端和服務(wù)端建立連接后,服務(wù)端向客戶端傳遞文件,當(dāng)服務(wù)端傳遞完文件后,客戶端需要發(fā)送一個"Thank you"給服務(wù)端。這里就有一個問題,客戶端該何時知道它應(yīng)該發(fā)送“Thank you”給服務(wù)端。如果服務(wù)端通過close關(guān)閉套接字發(fā)EOF給客戶端的話,服務(wù)端將再也無法接受“Thank you”。因此如果服務(wù)端只用關(guān)閉它的輸出流,并且傳遞EOF給客戶端的話就能夠解決這個問題。shutdown函數(shù)的半關(guān)閉可以同時做到上述的兩個需求。

基于半關(guān)閉的文件傳輸程序

下面介紹服務(wù)器的代碼:

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

#defind BUF_SIZE 30;
void error_handling(char*message);

int main(int argc,char *argv[]){
    int serv_sd,clnt_sd;
    FILE *fp;
    char buf[BUF_SIZE];
    int read_cnt;

    struct sockaddr_in serv_addr,clnt_addr;
    socklen_t clnt_addr_sz;

    if(argc!=2){
        printf("Usage: %s <port>\n",argv[0]);
        exit(1);
    }

    fp=fopen("file_server.c","rb");
    serv_sd=socket(PF_INET,SOCK_STREAM,0);

    memset(&serv_addr,0,sizeof(serv_addr));
    serv_addr.sin_familiy=AF_INET;
    serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    serv_addr.sin_port=htons(atoi(argv[1]));

    bind(serv_sd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
    listen(serv_sd,5);

    clnt_addr_sz=sizeof(clnt_addr);
    clnt_sd=accept(serv_ad,(struct sockaddr*)&clnt_addr,&clnt_addr_sz);

    while(1){
       read_cnt=fread((void*)buf,1,BUF_SIZE,fp);
       if(read_cnt<BUF_SIZE){
           write(clnt_sd,buf,read_cnt);
           break;
       }
       write(clnt_sd,buf,BUF_SIZE);
    }

    shutdown(clnt_sd,SHUT_WR);
    read(clnt_sd,buf,BUF_SIZE);
    printf("Message from client: %s \n",buf);

    fclose(fp);
    close(clnt_sd);close(serv_sd);
    return 0;
}

void error_handling(char *message){
    fputs(message,stderr);
    fputc('\n',stderr);
    exit(1);
}

下面介紹客戶端代碼:

#include<"與服務(wù)器頭文件聲明一致,故省略">
#defind BUF_SIZE 30
void error_handling(char *message);

int main(int argc,char*argv[]){
    int sd;
    FILE *fp;

    char buf[BUF_SIZE];
    int read_cnt;
    struct sockaddr_in serv_addr;
    if(argc!=3){
        printf("Usage: %s <IP> <port>\n",argv[0]);
        exit(1);
    }

    fp=fopen("receive.dat","wb");
    sd=socket(PF_INET,SOCK_STREAM,0);

    memset(&serv_addr,0,sizeof(serv_addr));
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
    serv_addr.sin_port=htons(atoi(argv[2]));

    connect(sd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));

    while((read_cnt=read(sd,buf,BUF_SIZE))!=0)
         fwrite((void*)buf,1,read_cnt,fp);

    puts("Reveived file data");
    write(sd,"Thank you",10);
    fclose(fp);
    close(sd);
    return 0;
}

void error_handling(char*message){
    //與服務(wù)器的內(nèi)容一致   
}

基于Windows的實現(xiàn)

Windows平臺同樣通過調(diào)用shutdown函數(shù)完成半關(guān)閉,只是想起傳遞的參數(shù)名略有不同。

#include<winsock2.h>
int shutdown(SOCKET sock,int howto);//成功返回0.失敗返回SOCKET_ERROR;
    sock   //要斷開的套接字句柄
    howto  //斷開方式的信息

上述函數(shù)的第二個參數(shù)的可能值及其含義如下:

1.SD_RECEIVE:斷開輸入流

2.SD_SEND:斷開輸出流

3.SD_BOTH:斷開IO流

雖然這些常量名不同于Linux中的名稱,但是其內(nèi)部的值完全相同。文章來源地址http://www.zghlxwxcb.cn/news/detail-582635.html

到了這里,關(guān)于TCP/IP 網(wǎng)絡(luò)編程 第七章:優(yōu)雅地斷開套接字連接的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 第七章——函數(shù)(C++的編程模塊)

    第七章——函數(shù)(C++的編程模塊)

    復(fù)習(xí)函數(shù)的基本知識 要使用C++函數(shù),必須完成如下工作: 提供函數(shù)定義 提供函數(shù)原型 調(diào)用函數(shù)? 庫函數(shù)是已經(jīng)定義和編譯好的函數(shù),同時可以使用標(biāo)準(zhǔn)庫頭文件提供其原型,因此只需要正確地調(diào)用這種函數(shù)即可。但是創(chuàng)建自己的函數(shù)時,必須自行處理上面提到的3個方面。

    2024年02月13日
    瀏覽(24)
  • C++ primer plus第七章編程練習(xí)答案

    1.編寫一個程序,不斷要求用戶輸入兩個數(shù),直到其中的一個為 0。對于每兩個數(shù),程序?qū)⑹褂靡粋€南數(shù)來計算它們的調(diào)和平均數(shù),并將結(jié)果返回給 main(),而后者將報告結(jié)果。調(diào)和平均數(shù)指的是倒數(shù)平均值的倒數(shù),計算公式如下: 調(diào)和平均數(shù)=2.0*xy/(x + y) 2.編寫一個程序,要求用

    2024年02月10日
    瀏覽(22)
  • 第七章 網(wǎng)絡(luò)安全【計算機網(wǎng)絡(luò)】

    第七章 網(wǎng)絡(luò)安全【計算機網(wǎng)絡(luò)】

    2023-7-7 17:11:39 以下內(nèi)容源自《【創(chuàng)作模板四】》 僅供學(xué)習(xí)交流使用 第六章 應(yīng)用層【計算機網(wǎng)絡(luò)】 計算機網(wǎng)絡(luò)(第8版) 謝希仁 編著 7.1.1計算機網(wǎng)絡(luò)面臨的安全性威脅 被動攻擊:截獲 流量分析 主動攻擊: 篡改 惡意程序 拒絕服務(wù)Dos 7.1.2安全的計算機網(wǎng)絡(luò) 7.1.3數(shù)據(jù)加密模型

    2024年02月13日
    瀏覽(32)
  • 《計算機網(wǎng)絡(luò)》 第七章 網(wǎng)絡(luò)安全

    《計算機網(wǎng)絡(luò)》 第七章 網(wǎng)絡(luò)安全

    兩大威脅:①被動攻擊 ②主動攻擊(篡改、惡意程序、拒接服務(wù)DoS) 對付被動攻擊:加密技術(shù) 對付主動攻擊:加密技術(shù)+ 鑒別技術(shù) 四個目標(biāo):①保密性 ②端點鑒別(身份驗證) ③信息完整性 ④運行安全性(訪問控制) 加密密鑰和解密密鑰使用相同密鑰的體制 例如:DES(

    2024年02月03日
    瀏覽(51)
  • 第七章 MobileNetv2網(wǎng)絡(luò)詳解

    第七章 MobileNetv2網(wǎng)絡(luò)詳解

    第一章 AlexNet網(wǎng)絡(luò)詳解 第二章 VGG網(wǎng)絡(luò)詳解 第三章 GoogLeNet網(wǎng)絡(luò)詳解? 第四章 ResNet網(wǎng)絡(luò)詳解? 第五章 ResNeXt網(wǎng)絡(luò)詳解? 第六章 MobileNetv1網(wǎng)絡(luò)詳解? 第七章 MobileNetv2網(wǎng)絡(luò)詳解? 第八章 MobileNetv3網(wǎng)絡(luò)詳解? 第九章 ShuffleNetv1網(wǎng)絡(luò)詳解? 第十章 ShuffleNetv2網(wǎng)絡(luò)詳解? 第十一章 EfficientNet

    2024年02月07日
    瀏覽(28)
  • 曲線藝術(shù)編程 coding curves 第七章 拋物線(Parabolas)

    曲線藝術(shù)編程 coding curves 第七章 拋物線(Parabolas)

    原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 譯者:池中物王二狗(sheldon) blog: http://cnblogs.com/willian/ 源碼:github: https://github.com/willian12345/coding-curves 曲線藝術(shù)編程系列第7章 我承認這一章腦暴時,再三考慮過是否要將拋物線包含進來。此篇覆蓋的拋物線比起之前三章

    2024年02月08日
    瀏覽(28)
  • LINUX網(wǎng)絡(luò)第七章:PXE——高效批量網(wǎng)絡(luò)裝機

    LINUX網(wǎng)絡(luò)第七章:PXE——高效批量網(wǎng)絡(luò)裝機

    目錄 部署PXE遠程安裝服務(wù) 1.PXE概述 2.實現(xiàn)過程 3.實驗操作 3.1安裝dhcp、vsftpd、tftp-server.x86_64、syslinux服務(wù) 3.2修改配置文件——DHCP ?編輯3.3修改配置文件——TFTP 3.4kickstart——無人值守安裝 3.4.1選擇程序 ?編輯3.4.2修改基礎(chǔ)配置 ?編輯3.4.3修改安裝方法? ?編輯3.4.4安裝新引導(dǎo)

    2024年01月22日
    瀏覽(20)
  • 第七章 網(wǎng)絡(luò)安全 | 計算機網(wǎng)絡(luò)(謝希仁 第八版)

    第七章 網(wǎng)絡(luò)安全 | 計算機網(wǎng)絡(luò)(謝希仁 第八版)

    計算機網(wǎng)絡(luò)面臨的安全威脅和一些主要問題 對稱密匙密碼體制和公匙密碼體制 數(shù)字簽名與鑒別 網(wǎng)絡(luò)安全協(xié)議IPsec協(xié)議族和運輸安全協(xié)議SSl/TSL的要點 系統(tǒng)安全:防火墻和入侵檢測 7.1.1 計算機網(wǎng)絡(luò)面臨的安全性威脅 計算機網(wǎng)絡(luò)上的通信面臨的威脅可以分為兩大類: 被動攻擊(

    2024年02月07日
    瀏覽(26)
  • 網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)(第七章):VRRP協(xié)議介紹及配置

    網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)(第七章):VRRP協(xié)議介紹及配置

    1.1 VRRP協(xié)議介紹 虛擬路由冗余協(xié)議(Virtual Router Redundancy Protocol,簡稱VRRP)是由IETF提出的解決局域網(wǎng)中配置靜態(tài)網(wǎng)關(guān)出現(xiàn)單點失效現(xiàn)象的路由協(xié)議。 利用VRRP,一組路由器(同一個VLAN中的接口)協(xié)同工作,但只要一個處于Master狀態(tài),處于該狀態(tài)的路由器接口承擔(dān)實際數(shù)據(jù)流量的

    2024年02月03日
    瀏覽(28)
  • 計算機網(wǎng)絡(luò)重點概念整理-第七章 網(wǎng)絡(luò)安全【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計算機網(wǎng)絡(luò)復(fù)習(xí)系列文章傳送門: 第一章 計算機網(wǎng)絡(luò)概述 第二章 物理層 第三章 數(shù)據(jù)鏈路層 第四章 網(wǎng)絡(luò)層 第五章 傳輸層 第六章 應(yīng)用層 第七章 網(wǎng)絡(luò)安全 計算機網(wǎng)絡(luò)整理-簡稱縮寫 給大家整理了一下計算機網(wǎng)絡(luò)中的重點概念,以供大家期末復(fù)習(xí)和考研復(fù)習(xí)的時候使用。 參

    2024年02月07日
    瀏覽(32)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包