盜圖一張
最近在學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 現在...