1. 程式人生 > >Unix網路程式設計上卷--第5章

Unix網路程式設計上卷--第5章

     在三路握手中,客戶接收到三路握手的第二個分節時,connect函式返回,而伺服器要直到接收到三路握手的第三個分節accept函式才返回(即connect返回之後再過一半RTT返回)。

使用命令:

%:ps -A -o pid,ppid,tty,stat,args,wchan

檢視程序的各個屬性。

   網路程式設計中可能會遇到的問題:

1,用fork子程序時,必須捕獲SIGCHLD訊號。(否則可能會出現大連殭屍(zombie)程序,影響系統工作)

2,捕獲訊號時,有可能會中斷某些系統呼叫。

3,SIGCHLD的額訊號處理函式必須正確編寫,應使用waitpid函式以免留下殭屍程序。

  伺服器程序終止:

客戶傳送資料到伺服器(注意,此處是伺服器,TCPf伺服器,而不是伺服器程序)時,之前連線的套介面的程序(伺服器程序)已經終止,則伺服器響應一個RST。

  伺服器主機崩潰:

客戶傳送資料不能到達伺服器,則TCP會一直向伺服器重傳,或者中間某個路由器通過ICMP告訴客戶機“主機不可達”(EHOSTUNREACH).

 伺服器主機崩潰後重啟:

伺服器主機崩潰後重啟,則會失去所有之前的TCP連線資訊。當客戶的TCP資料到達伺服器時,伺服器回覆一個RST。

Unix系統關機時,init程序通常先給所有程序傳送SIGTERM訊號(該訊號可以被捕獲),再等一段固定的時間(往往是5~20秒),然後給所有仍在執行的程序傳送SIGKILL訊號(該訊號不能被捕獲)。所以,想要在關機之前做一些事情(比如儲存資料)的程序要捕獲SIGTERM,並作出相應處理。

在網路中傳送資料時,可能因為網路位元組序跟主機位元組序的不同而造成資料傳輸出錯。需要注意。

相關推薦

Unix網路程式設計上卷--5

     在三路握手中,客戶接收到三路握手的第二個分節時,connect函式返回,而伺服器要直到接收到三路握手的第三個分節accept函式才返回(即connect返回之後再過一半RTT返回)。 使用命令: %:ps -A -o pid,ppid,tty,stat,args,

《TCP/IP網路程式設計5 筆記&程式碼&註釋

在第四章中的回聲迭代客戶端中,客戶端通過write()一次性將字串傳送過去,之後呼叫read()等待接受自己傳輸的字串,因此這個回聲迭代客戶端是不完美的。 解決方法就是提前確定接受資料的大小: //Linux while(1) { //......相同省略 int str_l

UNIX網路程式設計 套接字程式設計簡介

一.套接字地址結構 IPv4的地址結構為sockaddr_in,IPv6為sockaddr_in6,鏈路協議sockaddr_dl,Unix域為sockaddr_un,儲存為sockaddr_storage。 **套接字地址結構總是以引用形式來傳遞! 1.

Unix網路程式設計上卷--第二

 TCP連線的建立:3次握手。  TCP連線的終止:4次應答。  TCP連線的終止挺難理解的。關鍵是要理解如果其中的每一步的訊息丟失了會出現什麼情況,而最關鍵的是理解TIME_WAIT狀態。  TIME_WAIT之前的所有應答,如果對方在規定時鐘時間內沒有“回信”,則重新

《TCP/IP網路程式設計4 筆記&程式碼&註釋

TCP TCP Transmission Control Protocol 傳輸控制協議,意為對資料傳輸過程的控制。 TCP/IP 協議棧 TCP/IP 協議棧分四層: 應用層 TCP層/UDP層 IP層 鏈路層 根據2.的TCP套接字還是UDP套接字

《TCP/IP網路程式設計3 筆記&程式碼&註釋

IP(網路協議Internet Protocol):為了收發網路資料而給計算機分配的值。 埠號:為了區分程式中建立的套接字而分配給套接字的序號。 網路地址 IPv4 4位元組地址族(目前主要使用) IPv6 16位元組地址族(為了應對IP地址耗盡而提出的標準,但現在仍未普及)

《TCP/IP網路程式設計2 筆記&程式碼&註釋

注:本章內容大部分為第一章的伺服器與客戶端程式碼的解析與理解,十分重要 協議 伺服器端和客戶端為了能進行資料交換,他們必須遵循同一個協議:    建立套接字 int socket(int domain, int type, int protocol)//Lin

《TCP/IP網路程式設計1 筆記&程式碼&註釋

註釋筆記在程式碼內: 伺服器: //以下均在VS2015 WINDOWS平臺編譯並執行 //在Linux中 標頭檔案為: //#incude<sys/socket.h> //以下為服務端程式碼示例 #define _WINSOCK_DEPRECATED_NO_WARNINGS

C++ primer 程式設計練習題 5

Practice makes Pefect.! #include<iostream> #include<string> /*string I/O*/ using namespace std; struct Car { stri

【Java8網路程式設計3. HTTP和URLConnection類

1.HTTP基本概念 HTTP(HyperText Transport Protocol)是超文字傳輸協議的縮寫,它用於傳送WWW方式的資料。HTTP協議採用了請求/響應模型。客戶端向伺服器傳送一個請求,請求頭包含請求的方法、URL、協議版本、以及包含請求修飾

《TCP/IP網路程式設計12 I/O複用

12.1 基於I/O複用的伺服器端1.       多程序伺服器端的缺點    為了構建併發伺服器,只要有客戶端連線請求就會建立新程序。這的確是實際作業系統中採用的一種方案,但並非十全十美,因為建立程序時需要大量的運算和記憶體空間,由於每個程序都具有獨立的記憶體空間,所以相互

python網路資料採集-5儲存資料

5.1 媒體檔案簡述 網路上的資源很多,有圖片,視訊,常規檔案rar\zip等,由於網路爬去的資料量大,如果直接儲存,相對只儲存對應的連結字串,有很多缺陷:1、由於下載,導致爬取速度慢;2、消耗儲存空間;3、而且還要實現檔案下載的方法,繁瑣;優點:1、防

windows程式設計_5_繪圖基礎——學習筆記

一、概要        GDI 是WINDOWS極其重要的一部分,從程式設計師的角度來說,GDI由幾百個函式以及相關的一些資料型別、巨集和結構組成。GDI的一個主要目的是支援與裝置無關的圖形。 二、GDI的結構 1、GDI的函式分類 1) 獲取(或建立)和釋放(或銷燬)

《JavaScript高階程式設計5 引用型別

第5章引用型別在ECMAScript中,引用型別是一種資料結構,用於將資料和功能組織在一起。儘管ECMAScript從技術上講是一門面向物件的語言,但它不具備傳統的面嚮物件語言所支援的類和介面等基本結構

Visual C++網路程式設計經典案例詳解 5 網頁瀏覽器 製作個性化介面 工具欄程式設計 新增工具欄按鈕

製作網頁瀏覽器時 使用者還需要新增一些功能。 例如 使用者重新整理上一步下一步 和瀏覽記錄等。 這些操作在VC中實現非常簡單。 首先在資源管理器中,展開Toolbar項 新增四個工具欄按鈕 按鈕的ID分別為 ID_VIEWRECORD、ID_PRE、ID_NEXT、ID_REFR

Visual C++網路程式設計經典案例詳解 5 網頁瀏覽器 製作個性化介面 工具欄程式設計 OnCreate()函式

在這裡 使用者需要用到MFC中CReBar類 該類相當於一個容器 可以將多個控制元件組合在一起 程式碼如下 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ...//省略部分程式碼 if(dlg.m_hWnd==NU

Visual C++網路程式設計經典案例詳解 5 網頁瀏覽器 製作個性化介面 工具欄程式設計 新增對話方塊到工具欄

將ID為ID_DIALOG 的對話方塊新增到工具欄中, 使用者需要將類物件設定為CMainFrame類的成員變數 首先,在CMainFrame類的標頭檔案"MainFrm.h"開頭處 新增CTooldlg類的標頭檔案“Tooldlg.h” ... //省略部分程式碼 #includ

Visual C++網路程式設計經典案例詳解 5 網頁瀏覽器 製作個性化介面 工具欄程式設計 介面設計

在工程中新增一個對話方塊作為位址列等控制元件的面板 ID為 ID_DILOG 將組合框與連線按鈕放置到對話方塊面板上 介面中的各個控制元件以及屬性如表所示 控制元件ID及其屬性 控制元件ID IDC_STATIC IDC_COMBO1 IDC_BUTTON1 屬性 地址 地址輸入框

Visual C++網路程式設計經典案例詳解 5 網頁瀏覽器 製作個性化介面 工具欄程式設計

在VC中製作與IE功能相似的網頁瀏覽器 可以使用MFC中的CHtmlView類 也可以使用ActiveX控制元件類CWebBrowser2實現網頁瀏覽器的開發 對於網路瀏覽器而言 工具欄是很重要的一部分 在工程中使用工具欄可以方便使用者的操作。 使用者通過工具欄上的位址列輸入網頁地址

Visual C++網路程式設計經典案例詳解 5 網頁瀏覽器 HTTP響應 實體資料 類獲取響應訊息的響應碼

結構體的用法很簡單。 例如,利用該類獲取響應訊息的響應碼 程式碼如下 ... message msg; //結構體物件 CString str; //存放響應碼 msg.messagehead=&recvdata; //recvdata 為接收到的響應訊息