1. 程式人生 > >基本TCP套接字總結

基本TCP套接字總結

網路程式設計之前也寫過一些小程式,但是都是照貓畫虎.按照書中例項,一個一個照抄的.雖然程式都有本身的結構,照抄執行沒有問題.但是總覺得是門外漢.喜歡金庸的人,我想不止看電視劇那麼膚淺,都會看看原著小說.同樣,所有的網路程式設計都用socket,只是框架把原始函式包裹的不一樣。框架只是為了使用方便和程式碼複用,但要真正對網路程式設計理解深刻,原始函式的作用也每個步驟的細節還是要自己多多琢磨。

TCP/IP的基本結構和OSI 網路的7層模型是每個網路程式設計者必須具備的基本知識,這樣隨著套接字每個函式細節的展開,體會才更加深刻。Socket本身的歷史,和其實現時,ANSI C 還沒有成為標準。就後續IP地址,V4和V6的原因,也有很多函式相容問題。

intsocket(int  family,  int  type,  int protocol);

網路程式設計,離不開客戶端和伺服器。第一個函式都會是socket.但是在伺服器和客戶端此函式的後續需要不同的處理。Socket預設申請的套接字為主動套接字。

就是客戶端會用connect函式呼叫的套接字。而伺服器會呼叫listen,把這個主動套接字改為被動套接字,讓其接收外來連線。

    Bind函式,繫結IP地址和埠號。客戶端可以不用呼叫bind。因為在connect

時,客戶端核心會為其自動繫結本機IP和臨時埠。其實伺服器也可以由核心分配,雖然程式可以執行。由於伺服器每次分配的臨時埠號都不一樣,這樣客戶端就無法連線。

     客戶端(ip,port),伺服器(ip,port),其中伺服器port和客戶端port是不一樣的。只要客戶端知道在自己的埠(比如2323)要和伺服器的埠(比如5151)通訊就行,伺服器也是如此。

     伺服器:socket bind listen  accept

     客戶端:socket bind(可以省略) connect

 在這幾個函式呼叫後,套接字一直在變化狀態。比如伺服器,listen後,套接字是監聽套接字。可以接受外來連線請求。而accept成功後,會返回一個連線套接字。伺服器中就存在兩種套接字。客戶端connect時,只要知道伺服器的地址和埠,可以不用提供本機IP和埠繫結程式碼,有客戶端核心提供。將來伺服器可以通過getsockname獲取客戶連線資訊。

相關推薦

基本TCP總結

網路程式設計之前也寫過一些小程式,但是都是照貓畫虎.按照書中例項,一個一個照抄的.雖然程式都有本身的結構,照抄執行沒有問題.但是總覺得是門外漢.喜歡金庸的人,我想不止看電視劇那麼膚淺,都會看看原著小說

第4章 基本tcp編程

選擇 drl 時間 子網 CP epoll 默認值 operation 完整 4.1 各種套接字api(重要) 4.1.1 socket() 用於創建一個套接字描述符,這個描述符指明的是tcp還是udp,同時還有ipv4還是ipv6 #include <sys/s

UNIX網路程式設計——基本TCP程式設計 【轉貼】

一、基於TCP協議的網路程式 下圖是基於TCP協議的客戶端/伺服器程式的一般流程:                             &

02-基本TCP程式設計

//server.c #include <stdio.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <ctype.h> #include &

基本TCP程式設計

1.  socket函式原型: #include <sys/socket.h> int socket(int domain, int type, int protocol); 2. bind函式原型: #include <sys/socket.h>

網路程式設計—基礎 & 基本TCP程式設計-基本函式

套接字基礎 一個通用套接字地址結構sockaddr: struct sockaddr { unsigned short sa_family; //套接字的協議簇地址型別,AF_XX char sa_data[14];//儲存

《unix網路程式設計》(8)基本TCP

套接字函式 socket函式 建立一個套接字用於通訊: #include <sys/socket.h> int socket(int family, int type, int protocol); //成功返回非負的描述符,出錯返回-1 /* 引數:  

TCP編程

add 編程 數據 strong toa cstring class 結構 sock 基本函數庫 #include<cstring> #include<cstdlib> #include<unistd.h> #include<n

【Java TCP/IP Socket】深入剖析socket——TCP的生命周期

-i 指定 成了 上交 存在 initial com pos 技術分享 建立TCP連接 新的Socket實例創建後,就立即能用於發送和接收數據。也就是說,當Socket實例返回時,它已經連接到了一個遠程終端,並通過協議的底層實現完成了TCP消息或握手信息的交換。

TCP

唯一標識 所有 網絡層 協議 red OS 用戶 gre 互聯網 端口的概念 每個電腦一根網線,但是你掛著QQ的同時還可以瀏覽網頁。兩個不同應用的數據在同一根網線裏是如何傳輸的呢?根據七層互聯網模型,這個功能由運輸層(TCP是運輸層主要協議)實現。怎麽實現呢,在網絡層IP

【Java TCP/IP Socket程式設計】----深入剖析----TCP生命週期

目錄   簡介 TCP連線 關閉TCP連線 解調多路複用 --------筆記來自於書籍《Java TCP/IP Socket程式設計》 簡介     新的Socket例項建立後(無論是通過公有的建構函式,或通過呼叫ServerSoc

關於tcp長連結的應用

長連結就是在伺服器和客戶端在連線之後,  經過三次握手,客戶端不斷地向伺服器傳送請求,在此期間保證套接字不主動; 在程式碼中設定if判斷,判斷伺服器接收客戶端請求為空的時候,會四次揮手關閉套接字,斷開連線。 客戶端向伺服器傳送很多次請求,伺服器為了保證資料傳遞的準確性,在返回資料的時

Python之路(第三十一篇) 網路程式設計:簡單的tcp通訊、粘包現象

  一、簡單的tcp套接字通訊 套接字通訊的一般流程 服務端 server = socket() #建立伺服器套接字 server.bind() #把地址繫結到套接字,網路地址加埠 server.listen() #監聽連結 inf_loop:

基於threading模組下Thread,實現多執行緒TCP通訊

伺服器 import socket from threading import Thread import struct, json IP = '127.0.0.1' PORT = 8080 ADD = (IP, PORT) server = socket.socket

初學Node.js中使用TCP程式設計

一:建立TCP伺服器var net =require('net');var HOST ='127.0.0.1';var PORT =6969;// 建立一個TCP伺服器例項,呼叫listen函式開始監聽指定埠// 傳入net.createServer()的回撥函式將作為”c

Linux網路程式設計 tcp程式碼

本次介紹一下TCP協議下的套接字程式碼,總體來看,tcp協議比udp協議更加安全可靠,無論是從使用者使用的角度還是從編寫程式碼的角度,你會發現與udp不同的是tcp在每次通訊前,伺服器端和客戶端都會進行一次連線,連線成功後,才可以進行相互間的通訊。 套接字

python 網路程式設計 TCP例項

一. 伺服器端程式碼tcpServer.py: from socket import * from time import ctime #HOST變數為空,表示bind()函式可以繫結在所有有效的地址上 HOST = '' PORT = 21234 #設定緩衝大小為1

《Java開發實戰1200例》(第2卷)學習筆記—TCP

Socket基礎 例項307:建立伺服器套接字 -通過ServerSocket類建立繫結到指定埠的伺服器套接字物件,然後呼叫ServerSocket類的accept()方法監聽客戶端的連線。 全部程式碼如下: import java.awt.Bo

TCP程式設計 整理《計算機網路——自頂向下方法(James F. Kurose, Keith W. Rose)》

       與UDP不同,TCP是一個面向連線的協議。這意味著,在客戶端和伺服器能夠開始互相傳送資料之前,它們要先握手和建立一個TCP連線。連線建立之後,當有一方需要給另一方傳送資料,它只需經套接字把資料丟個TCP連線,無需再為資料附上目的地地址。1. 下面討論一下TCP客

TCP與UDP程式設計

用C++和Java很容易實現socket通訊,兩者大同小異,注意在嘗試換一種新的實現時,記得弄清兩者區別。 這裡簡述java實現的應用層Socket通訊方法,並重點分析實現的區別。 具體實現已經有很