基於UDP協議的socket程式設計

2021-08-20 18:51:09 字數 3368 閱讀 9353

一、socket概述

1.socket一般被稱為「套接字」,網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端就叫做socket。

2.建立網路通訊連線至少需要乙個埠號(socket),socket利用網路之間的通訊設施實現程序通訊,但它對通訊設施的細節不關心,只要通訊設施能夠提供足夠的通訊能力,就可以實現通訊。

例子:假如你想給你乙個人打**,首先你得有一部**機,這個**機就相當於申請了乙個socket;同時你也要知道對方的**號碼,就相當於對方也有了乙個固定的socket;然後你撥號呼叫對方,相當socket發出連線請求,如果對方在並且空閒,就會接起**,雙方就可以正式通話,相當於連線成功;雙方通話的這個過程,就相當於向socket傳送資料和從socket接收資料的過程。

3. socket常用函式

網路連線函式:① socket():建立套接字;

② bind():繫結本機埠;

③ connect():與埠建立連線;

④ listen():監聽埠是否有資料請求過來;

⑤ accept():接受資料的請求連線;

⑥ recvfrom() :資料接受;

⑦ send,sendto():資料傳送;

⑧ close():關閉套接字。

4.socket程式設計步驟

(1)伺服器端步驟

①使用socket()函式載入套接字型檔,建立套接字;

②使用bind()函式來繫結套接字到乙個ip位址和乙個埠上;

③使用listen()函式將套接字設定為監聽模式,等待連線請求;

④用accept()函式接受連線請求,返回乙個新的對應於連線的套接字;

⑤用send()/sendto()函式返回的套接字和客戶端進行通訊;

⑥返回到第三步,等待另乙個請求;

⑦用closesocket()函式關閉套接字。

(2)客戶端步驟

①使用socket()函式

載入套接字型檔,建立套接字

;②使用connect()函式向伺服器發出連線請求;

③用send()/recv()函式與伺服器端進行通訊;

④通訊完成後,用closesocket()函式關閉套接字。

二、udp協議

1.  udp

是userdatagram protocol

的簡稱,中文名是使用者資料報協議,在網路中它與

tcp協議一樣用於處理資料報,是一種無連線的協議。它不與對方建立連線,而是直接就把資料報傳送過去。

2. udp

協議是面向非連線的協議,沒有建立連線的過程,所以它的通訊效率高;也正因為如此,它的可靠性不如

tcp協議高。u

dp只適用於一次只傳送少量資料、對可靠性要求不高的應用環境,一次只能傳送的資料不能超過64kb 。

3.udp協議流程圖

伺服器端

因為udp是無連線的 ,所以伺服器端並不需要listen()函式和accept()函式。

4. udp協議的優點

udp套介面是無連線的,不可靠的資料報協議,既然它是不可靠的,為什麼還要用呢?我總結以下三點:

(1)udp協議支援廣播或多播;

(2)因為它是無連線的,所以處理速度快;

(3)可以設定超時防止對方無限等待。

三、qt實現

1. 頁面的搭建

伺服器端和客戶端的頁面是一樣的,都是由輸入款、輸出框和傳送按鈕三部分組成的。

2. 伺服器端**實現

#include

"mainwindow.h"

#include

"ui_mainwindow.h"

#include

mainwindow::mainwindow(qwidget

*parent):

qmainwindow(parent),

ui(new

ui::mainwindow)

mainwindow::~mainwindow()
void

mainwindow::recv()

}
void

mainwindow::on_pushbutton_clicked()

2. 客戶端**實現

#include

"mainwindow.h"

#include

"ui_mainwindow.h"

#include

#include

mainwindow::mainwindow(qwidget

*parent):

qmainwindow(parent),

ui(new

ui::mainwindow)

mainwindow::~mainwindow()
void

mainwindow::on_pushbutton_clicked()

void

mainwindow::recv()

}
3. 功能實現

在客戶端的輸入框輸入hello world,在伺服器端的輸出框就接收到了hello world,同樣也可以在伺服器上的輸入端給客戶端傳送資料,兩個是互通的。

四、總結

通過這次對socket程式設計的學習,我對socket程式設計有了乙個大致的,初步實現了udp形式的客戶端與伺服器端的通訊。在實現功能的時候,我總結了必須要掌握的以下幾點知識:

(1)清楚地掌握socket程式設計步驟;

(2)掌握udp協議的原理和實現步驟;

(3)能夠區分在無連線udp方式下和有連線方式tcp下的socket程式設計;

(4)掌握qt開發軟體的使用。

基於UDP協議的socket程式設計

udp協議特點 1.無連線。服務端與客戶端傳輸資料之前不需要進行連線,且沒有超時重發等機制,只是把資料通過網路傳送出去。也正是因為此特點,所以基於udp協議的socket的客戶端在啟動之前不需要先啟動服務端。2.不可靠。資料在本地通過網路發出之後,udp協議會立即清除本地的快取,即使對方沒有收到該資...

基於Socket的UDP和TCP協議

一 概述 tcp 傳輸控制協議 和udp 使用者資料報協議 是網路體系結構tcp ip模型中傳輸層一層中的兩個不同的通訊協議。tcp 傳輸控制協議,一種面向連線的協議,給使用者程序提供可靠的全雙工的位元組流,tcp套介面是位元組流套介面 stream socket 的一種。udp 使用者資料報協議。...

基於UDP協議的Socket網路程式設計

一 基於udp協議的socket網路程式設計流程 採用 udp 套接字方式實現c s的通訊程式由客戶端和伺服器端兩部分組成。伺服器端程序依次按以下步驟進行 1 呼叫socket 建立乙個資料報套接字 2 呼叫 bind 把伺服器位址繫結在該套接字上 3 呼叫recvform 等待客戶程序發來的請求,...