TCP初步學習

2021-09-29 16:48:09 字數 2458 閱讀 3992

盜圖一張

最近在學tcp服務開發

先來乙個最初版本的

服務端

#include

"pch.h"

#include

#include

//winsock2必須放在windows上面,因為早期的window已經實現了winsock,會引起衝突

#include

#include

using namespace std;

#pragma comment(lib,"ws2_32")

//明確指出要用到的庫

intmain()

; _sin.sin_family = af_inet;

//定義繫結位址的型別為ipv4

_sin.sin_port =

htons

(4567);

//主機to網路

_sin.sin_addr.s_un.s_addr = inaddr_any;

//主機任意ip都可以訪問的

if(socket_error ==

bind

(sock,

(sockaddr*

)&_sin,

sizeof

(_sin)))

cout <<

"繫結失敗"

<< endl;

else

cout <<

"繫結成功"

<< endl;

//監聽埠listen

if(socket_error ==

listen

(sock,5)

)//最多5人連線

cout <<

"監聽失敗"

<< endl;

else

cout <<

"監聽成功"

<< endl;

//等待接收accept

sockaddr_in new_client =

; socket csock = invalid_socket;

int claddr =

sizeof

(sockaddr_in)

;char msgbuf=

"hello i am server"

;char str[

100]

;while

(true)

//關閉自身

closesocket

(sock)

;wsacleanup()

;return0;

}

客戶端的

#include

"pch.h"

#include

#include

//winsock2必須放在windows上面,因為早期的window已經實現了winsock,會引起衝突

#include

#include

using namespace std;

#define _winsock_deprecated_no_warnings

#pragma comment(lib,"ws2_32")

//明確指出要用到的庫

intmain()

; _sin.sin_family = af_inet;

_sin.sin_port =

htons

(4567);

inet_pton

(af_inet,

"127.0.0.1"

,&_sin.sin_addr.s_un.s_addr)

;//將127.0.0.1轉換為_sin.sin_addr.s_un.s_addr,成功返回1

int ret =

connect

(sock,

(sockaddr*

)&_sin,

sizeof

(sockaddr_in));

if(socket_error == ret)

cout <<

"連線失敗"

<< endl;

else

cout <<

"連線成功"

<< endl;

//接收伺服器發來的資訊

char revbuf[

256]

;recv

(sock, revbuf,

256,0)

; cout <<

"接收到伺服器的資訊:"

<< revbuf << endl;

//關閉

closesocket

(sock)

;wsacleanup()

;system

("pause");

return0;

}

TCP協議初步理解(一)

tcp作為傳輸控制協議,控制著傳輸層。為了保證資料可靠傳遞,主要有兩種方法保證資料傳輸可靠性。重新傳送也能處理超差問題,所以重試是很多通訊協議的基礎,包括了tcp。既然有重試,那傳送方必須知道什麼時候停止重試,也就是說需要接受者的響應,一般稱之為ack。這裡又會牽扯到新的問題。第乙個問題比較麻煩,t...

初步認識TCP協議 TCP的reset報文

當本次tcp接收到不正確的tcp報文 即埠號與ip位址為本機,但對方的ip位址本機不認識,或是對應埠上沒有tcp連線 時,會傳送reset報文通知對方放棄連線。tcp連線是通過socket對來標識連線的 即本機與對方的ip位址加埠號 傳送rst包關閉連線時,不必等緩衝區的包都發出去,直接就丟棄緩衝區...

我對tcp的初步理解

以前總聽說tcp ip協議,感覺很叼,總搞不清是個什麼東西。最近在看unix網路程式設計,似乎有點懂了,不就是源 麼。也就是核心的一部分,至於是誰規定出來的,是誰寫出來的,我想應該是n個牛人協議出來的吧。以前看書的時候總有這樣的問題,為什麼有了tcp就可以實現網路的資料傳輸呢?是不是我有點sb 現在...