網路程式設計 TCP 1

2021-08-10 17:14:15 字數 2939 閱讀 3218

本篇部落格將會實現tcp的程式設計流程,在實現tcp程式設計之前,先將tcp/ip的四層協議做以簡單的介紹。

一、tcp/ip四層協議

tcp/ip的四層協議自底向上分別是資料鏈路層網路層運輸層應用層。很多人也有了解過osi七層協議,同樣的,自底向上分別是物理層資料鏈路層網路層運輸層會話層表示層應用層。而我們主要來說一下tcp/ip四層協議。

1、資料鏈路層

a.資料鏈路層實現了網絡卡介面的網路驅動程式,以處理資料在物理媒介上的傳輸。

b.常用協議:arp協議、rarp協議。

2、網路層

a.網路層實現資料報的選路和**。

b.常用協議:ip協議、icmp協議。

3、運輸層

a.運輸層為兩台主機實現了端到端的服務。

b.常用協議:tcp協議、udp協議、sctp協議。

4、應用層

a.應用層負責處理應用程式的邏輯。

b.常用協議:dns協議(當然應用層不止這乙個協議,這裡只說這乙個)

二、使用tcp協議完成網路程式設計

1、完成網路程式設計需要客戶端和伺服器端,簡單說一下客戶端和伺服器端。

客戶端:請求服務

伺服器端:提供服務

2、協議選擇(本篇部落格選擇tcp,之後專門更一篇udp的)

tcp協議:它是一種面向連線的,可靠的,流式服務。

udp協議:它是一種無連線,不可靠的,資料報服務。

3、tcp的程式設計流程:

ser(伺服器端):socket、bind、listen、accept、recv/send、close

cli(客戶端):socket、(bind)、connect、recv/send、close

接下來說一下用到的函式

a. int socket( int domain, int type, int protocol);

domain:告訴系統選擇哪個底層協議族, af_inet是pf_inet協議族所對應的位址族.

type:選擇協議 sock_stream(tcp), sock_ugram(udp).

protocol:這個值一般我們都把它設定為0,表示使用預設協議。本來這個引數是在前兩個引數的基礎上,再選擇乙個具體的協議,但是前兩個引數已經完全決定了它的值,所以這個引數一般置為0.

b. int bind(int sockfd, const struct sockaddr* addr, int addrlen )

addr:指定ip位址和埠號.

addrlen:指定ip位址和埠號的長度.

c. int listen(int sockfd, int backlog)

backlog:核心監聽佇列的最大長度,典型引數值是5.

d. int accept(int sockfd, struct sockaddr * addr, int addrlen)

addr:記錄客戶端的 ip 位址和埠號

addrlen:記錄的客戶端的 ip 位址和埠號的長度.

注意:bind和accept的addr不是同乙個。

e. int connect(int sockfd, struct sockaddr* addr, int addrlen);

addr: 要連線的伺服器的 ip 位址和埠號.

addrlen:要連線的伺服器的 ip 位址和埠號的長度.

f. revc/send

revc(int sockfd, void *buf, int len, int flags);//讀資料

send(int sockfd, const void *buf, int len, int flags);//寫資料

buf:指定讀/寫緩衝區位置

len:指定讀/寫緩衝區大小

flags:置為0即可

接下來就是**了

ser.c

#include

#include

#include

#include

#include

#include

#include

#include

void main()

; recv(c,buff,127,0);

printf("recv::%s\n",buff);

send(c,"i know",strlen("i know"),0);

close(c);

}close(sockfd);

}

cli.c

#include

#include

#include

#include

#include

#include

#include

#include

void main()

; recv(sockfd,buff,127,0);

printf("recv::%s\n",buff);

close(sockfd);

}

執行結果

注意:應該先執行伺服器端,再執行客戶端,當伺服器在執行的時候,它會等待客戶端給他傳送請求,然後響應客服端的請求。要是先執行客戶端,再執行伺服器端,此時的伺服器端是接收不到客戶端的請求的,有興趣的可以試一下,我自己在這上面踩得坑不少。

TCP協議 傳輸控制協議TCP(1)

tcp協議具有以下特點 1 tcp協議是面向連線的,工作在運輸層。也就是說,tcp協議在傳輸資料之前需要先建立連線,傳輸結束後要釋放連線。3 tcp連線是可靠的。通過tcp連線可以無差錯的傳輸資料,使資料不丟失 不重複且按序到達。4 tcp提供全雙工的通訊。5 面向位元組流。所謂的面向位元組流就是說...

java網路程式設計 TCP程式設計基礎 1

tcp網路程式設計是指利用socket類編寫通訊程式。分為客戶端與服務端 tcp採用 三次握手 進行執行 客戶端 socket socket new socket iinetaddress address,int prot 1 例項化socket套接字 2 通過socket物件呼叫輸出 輸入流並返回...

網路程式設計 TCP協議使用1

網路的基礎概念 tcp程式設計就像乙個手機,整個過程可以模擬打 的過程,tcp服務端和客戶端首先都要建立套接字,相當於在運營商那裡辦理sim卡,你有卡才能打 tcp服務端,bind就是將服務端的手機號公開,讓別人知道,這樣別人就能給服務端打 了,listen是設定未完成3次握手佇列和已完成3次握手佇...