基本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通訊方法,並重點分析實現的區別。 具體實現已經有很