linux socket程式設計示例 UDP

2021-07-04 20:33:34 字數 2487 閱讀 2044

在網路傳輸協議中,tcp協議提供的是一種可靠的,複雜的,面向連線的資料流(sock_stream)傳輸服務,它通過三段式握手過程建立連線。tcp有一種「重傳確認」機制,即接收端收到資料後要發出乙個肯定確認的訊號,傳送端如果收到接收端肯定確認的訊號,就會繼續傳送其他的資料,如果沒有,它就會重新傳送。

相對而言,udp協議則是一種無連線的,不可靠的資料報(sock_dgram)傳輸服務。使用udp套介面不用建立連線,服務端在呼叫socket()生成乙個套接字並呼叫bind()繫結埠後就可以進行通訊(recvfrom函式和sendto函式)了;客戶端在用socket()生成乙個套接字後就可以向服務端位址傳送和接收資料了。

此處需要特別注意:tcp使用的是流套接字(sock_stream),udp使用的是資料報套接字(sock_dgram)

示例:服務端

#include#include#include#include#include#include#include#include#include#include#include#define server_port 8000 

#define buffer_size 1024

#define file_name_max_size 512

int main()

/* 繫結套介面 */

if ( -1 == ( bind( i_serverfd, (struct sockaddr*)&server_addr,

sizeof( server_addr ) ) ) )

/* 資料傳輸 */

while(1)

; bzero( psz_buff, buffer_size );

if ( recvfrom( i_serverfd, psz_buff, sizeof( psz_buff ) - 1, 0,

(struct sockaddr*)&client_addr, &clientaddr_len ) == -1 )

printf( "message from client: %s\n", psz_buff );

memset( psz_buff, 0, sizeof( psz_buff ) );

strncpy( psz_buff, "welcome to my workspace", sizeof( psz_buff ) - 1 );

if ( sendto( i_serverfd, psz_buff, strlen( psz_buff ), 0,

( struct sockaddr * )&client_addr, sizeof( client_addr ) ) < 0 )

} close( i_serverfd );

return 0;

}

客戶端:

#include#include#include#include#include#include#include#include#include#include#include#define server_port 8000 

#define buffer_size 1024

#define file_name_max_size 512

int main()

char psz_buff[file_name_max_size + 1];

bzero( psz_buff, file_name_max_size + 1 );

printf( "please input message:\n" );

scanf( "%s", psz_buff );

// send message

if ( sendto( i_clientfd, psz_buff, strlen( psz_buff ), 0,

( struct sockaddr * )&server_addr, sizeof( server_addr ) ) < 0 )

memset( psz_buff, 0, sizeof( psz_buff ) );

socklen_t clientaddr_len = 0;

if ( recvfrom( i_clientfd, psz_buff, sizeof( psz_buff ) - 1, 0,

(struct sockaddr*)&server_addr, &clientaddr_len ) == -1 )

printf( "message from server: %s\n", psz_buff );

// receive message

close(i_clientfd);

return 0;

}

輸出:

客戶端:

please input message:

111message from server: welcome to my workspace

服務端:

message from client: 111

linux socket 程式設計

兩段程式 可用於開發板和主機之間的資料傳輸,很管用!file client.c檔案傳輸客戶端程式示例 本檔案是客戶機的 include for sockaddr in include for socket include for socket include for printf include f...

linux socket程式設計

雙休日無聊透頂,看了四五集 反恐24小時 實在不想看了,於是就想搞linux的socket programming來玩玩,前期資料都準備好 早就想寫個看看了。首先,寫個簡單的client端的程式 呵,其實是copy!server端用的是網上當的乙個除錯工具 一開始用的是以前用過的乙個多執行緒執行的介...

Linux Socket程式設計 執行緒

本章主要列舉伺服器程式的各種網路模型,示例程式以及效能對比後面再寫。一 分類依據。伺服器的網路模型分類主要依據以下幾點 1 是否阻塞方式處理請求,是否多路復用,使用哪種多路復用函式 2 是否多執行緒,多執行緒間如何組織 3 是否多程序,多程序的切入點一般都是accept函式前 二 分類。首先根據是否...