socket程式設計流程(使用TCP協議為例)

2021-08-22 19:44:34 字數 1790 閱讀 1628

先來簡單回憶一下上一次說到的tcp協議

tcp協議:面向連線、可靠的、流式服務

udp協議:無連線的、不可靠的、資料報服務

會發現udp協議和tcp協議恰好相反,但是既然有了可靠的tcp協議,為什麼又要另外乙個不可靠的udp協議呢???

因為udp有它自己的優點udp協議是無連線方式的協議,它的效率高,速度快,佔資源少,使用起來會更快捷,方便,如一般的聊天軟體。

下面編寫乙個程式設計流程(以tcp協議為例)

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

(1)(

建立socket)socket(int  domain,int  type,int  protocol)

domain引數表示告訴系統使用哪個底層協議族。我們現在一般還使用ip v4,所以

domain:: 協議簇 af_inet

type:: 選擇協議 sock_stream(tcp) sock_dgram(udp)

protocol:: 0

示例:

int sockfd = socket(af_inet,sock_tream,0)

(2) (命名socket)bind (int  sockfd,const struct sockaddr* my_addr,socklen_t  addrlen)

sockfd:相當於檔案描述符

my_addr:將my_addr所指的socket位址分配給未命名的sockfd檔案描述符。指定 ip 位址和埠號,裡面有三部分,地                                 址簇、埠號、ip位址。

struct sockaddr_in

struct in_addr

(3)(

監聽socket)listen(int sockfd ,int backlog)

backlog:指所有處於半連線狀態和完全連線狀態的socket的上限。典型值為5。

(4)(接收連線)accept

(int  sockfd,struct sockaddr  *addr, socklen_t  *addreln)

返回值: 獲取到的和客戶端連線的檔案描述符

(5)recv/send

recv:(int sockfd ,void *buf, size_t  len,int  flags)

send(int sockfd ,const void *buf, size_t  len,int  flags)

(6)(關閉連線)close(int sockfd)

客戶端(client):socket    connect  recv/send  close

這裡不同的就是connect發起連線函式

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

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

下面是**顯示:

伺服器端(ser)

客戶端(cli)

Socket 程式設計(TCP)

詳細請參見 點我o o哈!很不錯的一篇文章哈 下面是接收資料和傳送資料的函式 int receive socket fd,char sztext,int len if rc 0 return len cnt sztext rc cnt rc return len int send socket fd...

Socket 程式設計(TCP)

下面是接收資料和傳送資料的函式 cpp view plain copy intreceive socket fd,char sztext,intlen if rc 0 return len cnt sztext rc cnt rc return len int send socket fd,char...

socket程式設計TCP

注意一定要先啟動server,再啟動client,否則client因為無法找到server而丟擲異常 coding utf 8 from socket import serverport 12000 af inet表示底層網路使用的是ipv4,sock stream表示使用的socket型別是tcp...