和TCP套接字一樣,UDP套接字也通過socket( )函數創建,不同的是UDP套接字可以通過一個套接字描述符在不同的主機之間發送和接收報文。
創建UDP客戶端的典型過程為:首先調用socket( )函數,接下來定義發送和接收數據的遠程主機和端口,然后將套接字傳遞給connect( )函數。套接字描述符在后面會用于發送和接收數據。除此之外,發送數據的目標主機和端口可以在數據“寫入”時指定,這樣就可以用一個套接字發送數據到多個主機。
UDP數據報的發送可以使用write( )、send( )或sendto( )函數。如果使用write( )或send( ),則必須事先以UDP套接字為參數調用connect( )函數,此外,如果使用sendto( )函數則可以在發送數據時再指定目標地址及端口。接收UDP數據報可以使用read( )、recv( )或recvfrom( )函數。如果使用read( )或recv( ),則必須事先調用connect( )函數;如果使用recvfrom( ),則可以在接收數據報時獲得源IP地址和端口。
與TCP不同的是,在UDP套接字上收發的數據是作為單獨的單元接收或發送的,而不是作為字節流。每次調用write( )、send( )、或sendto( )函數都會在線路上產生一個UDP數據報。接收到的UDP數據報的讀取也是一個單獨的操作,如果讀取報文時提供的緩沖區長度不夠,則會返回一個出錯代碼。
如果UDP數據報的長度超出了本地或者任意一個必經的網絡上的最大片長度,則必須進行分段,這在性能上會有不良影響,因此有些操作系統對此做了限制或者不予支持。