linux網路程式設計之udp的connect趣談

2021-07-03 21:39:10 字數 1581 閱讀 5572

對於linux網路程式設計,udp協議不是面向連線的協議,直接把資料報傳送到鏈路層,至於能不能到達目的ip和埠,它不關注;大部分時候再編寫**時候只需要在sendto函式中指定你要傳送的埠和ip位址就可以了,不用繫結ip和埠。不過你是否考慮過,udp到底是否可以進行connect,如果對udp進行connect函式的呼叫,會發生什麼現象呢?

在進行socket網路程式設計**編寫時,我個人覺得有如下三個步驟在客戶端和服務端是一致的,只是觸發的時機不同。

以上三個步驟在tcp協議通訊中client是必須存在,但是udp協議中,可能針對connect看到的不多。

依據上面的說明,udp可以分為如下兩種:

未連線的udp,新建立的udp套接字。

已連線的udp,呼叫connect就會這樣。

比較1/2兩種udp,已經連線的udp有如下特性:

對乙個udp的套介面多次呼叫connect的情況如何?

第乙個目的不同於tcp連線connect的使用:對於tcp連線,connect只能呼叫一次;針對udp則可以connect到不同的server,eg:client需要和多個伺服器同時通訊。

第二個目的為了斷開乙個已連線的udp連線,再次呼叫connect時,把套接字位址結構的位址簇成員(ipv4為sin_family,ipv6為sin6_family),設定為af_unspec即可。

具體的操作例子如下:

回顯伺服器

#include#include#include#include#include#include#include#includeusing namespace std;

int main()

if(bind(socklistener,(struct sockaddr*)&addrlistener,sizeof(addrlistener))==-1)

struct sockaddr_in addrclient;

cout<<"callback server begin to listen"<0)

int f = 0;

if(connect(sockclient,(struct sockaddr*)&addrserver,sizeof(addrserver))==-1)

f = 1;

fd_zero(&sethold);

fd_set(stdin_fileno,&sethold);

fd_set(sockclient,&sethold);

cout<<"you can type in sentences any time"<

客戶端2,主動向客戶端1傳送資料

主要是為了證明,在client1向server建立連線後,不會接受client2的資料,斷開連線後會接受client2的資料

#include#include#include#include#include#include#include#includeusing namespace std;

int main()

}

通過connect建立的udp套介面,可以有效的提高系統的整體效能,減少未連線的udp上每次傳送資料報時的連線建立/連線拆除的過程,只需要建立一次即可。



Linux 網路程式設計之UDP

1.介紹 udp協議是無連線的,不可靠傳輸的協議.伺服器與客戶端的互動不需要建立連線,沒有流量控制的功能。與tcp一樣,它也是傳輸層協議,通訊過程中需要ip位址與埠號。使用udp進行程式設計包括伺服器與客戶端,下面介紹一下伺服器與客戶端的通訊流程 伺服器流程 1 建立伺服器套接字描socket 2 ...

linux網路程式設計之UDP

udp 前面已經講過tcp網路通訊,然後tcp每次通訊都要進行三次握手連線,雖然傳輸的可靠性比較高,但對於一些及時性的資料的傳輸顯得太過費時,所以就有了udp這種無連線通訊,但資料容易出錯。伺服器端填充 sockaddr結構 bzero addr,sizeof struct sockaddr in ...

Linux網路程式設計之UDP

一 概述 udp 是 user datagram protocol 的簡稱,中文名是使用者資料報協議,是乙個簡單的面向資料報的運輸層協議,在網路中用於處理資料報,是一種無連線的協議。udp 不提供可靠性的傳輸,它只是把應用程式傳給 ip 層的資料報傳送出去,但是並不能保證它們能到達目的地。由於 ud...