日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下编写UDP/TCP版本的服务器和客户端的流程

發布時間:2024/4/11 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下编写UDP/TCP版本的服务器和客户端的流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux下編寫UDP/TCP版本的服務器和客戶端的流程

文章目錄

  • Linux下編寫UDP/TCP版本的服務器和客戶端的流程
    • 一:UDP和TCP的區別
    • 二、UDP編寫服務器的步驟
    • 三、UDP編寫客戶端的步驟
    • 四、TCP編寫服務器的步驟
    • 五、TCP編寫客戶端的步驟

一:UDP和TCP的區別

  • 1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
  • 2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,通常情況下是無差錯,不丟失,不重復,且按序到達的,(注意,這里的可靠是在通常情況下,在非通常情況下,TCP傳送數據并不是不是100%,比如把網線拔了,數據就無法到達,所以TCP的可靠指發送數據后,會收到有一個確認的信號);UDP盡最大努力交付,即不保 證可靠交付,也就是得不到具體的回復,不知道數據是否到達或者沒有到達。
  • 3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的。UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
  • 4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
  • 5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
  • 6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

二、UDP編寫服務器的步驟

  • 1、創建一個socket,用函數socket();
int socket(int domain, int type, int protocol);
  • 2、綁定IP地址、端口等信息到socket上,用函數bind();
int bind(int socket, const struct sockaddr *address,socklen_t address_len);
  • 3、循環接收數據,用函數recvfrom();
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
  • 4.把服務器處理的數據發送給客戶端sendto()
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
  • 5、關閉網絡連接,斷開鏈接;

三、UDP編寫客戶端的步驟

  • 1、創建一個socket,用函數socket();
int socket(int domain, int type, int protocol);
  • 2、客戶端一般不需要bind(),讓操作系統內核隨機分配一個端口號給客戶端使用,因為在通常情況下,一個端口只能被一個進程bind(),此時如果客戶端bind(),并且如果有其他客戶端同樣bind()到同一個端口號,就會出錯
  • 3、發送數據,用函數sendto();
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
  • 4、接收服務器端發送回來的結果,recvfrom()
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
  • 5、關閉網絡連接;

四、TCP編寫服務器的步驟

  • 1、創建一個socket,用函數socket();
int socket(int domain, int type, int protocol);
  • 2、設置socket屬性,用函數setsockopt(); * 可選

  • 3、綁定IP地址、端口等信息到socket上,用函數bind();

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
  • 4、開啟監聽,用函數listen();
int listen(int s, int backlog);
  • 5、接收客戶端上來的連接,用函數accept();
int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
  • 6、收發數據,用函數send()和recv(),或者read()和write();
int send(int s, const void *msg, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • 7、關閉網絡連接;

  • 8、關閉監聽;

五、TCP編寫客戶端的步驟

  • 1、創建一個socket,用函數socket();
int socket(int domain, int type, int protocol);
  • 2、設置要連接的對方的IP地址和端口等屬性;

  • 3、連接服務器,用函數connect();

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
  • 4、收發數據,用函數send()和recv(),或者read()和write();
int send(int s, const void *msg, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • 5、關閉網絡連接;

總結

以上是生活随笔為你收集整理的Linux下编写UDP/TCP版本的服务器和客户端的流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。