Linux和Windows間的UDP通訊

2021-08-21 03:32:29 字數 2415 閱讀 2663

udp(user datagram protocol)的中文叫使用者資料報協議,屬於傳輸層。udp是面向非連線的協議,它不與對方建立連線,而是直接把我要發的資料報發給對方。所以udp適用於一次傳輸資料量很少、對可靠性要求不高的或對實時性要求高的應用場景。正因為udp無需建立類如三次握手的連線,而使得通訊效率很高。

:      建立乙個socket

:          將這個socket繫結在某個埠上(af_inet)

:  如果沒有客戶端發起請求,則會阻塞在這個函式裡

:        通訊完成後關閉socket

:     相伺服器的某個埠發起請求(af_inet)

3. close

:        通訊完成後關閉socket

函式初始化過程如下圖所示:

以下是linux系統下執行的伺服器端**

#include #include #include #include #include #include #include #include #define serv_port   4567   

int main()

/* 設定address */

struct sockaddr_in addr_serv;

int len;

memset(&addr_serv, 0, sizeof(struct sockaddr_in));

addr_serv.sin_family = af_inet;

addr_serv.sin_port = htons(serv_port);

/* inaddr_any表示不管是哪個網絡卡接收到資料,只要目的埠是serv_port,就會被該應用程式接收到 */

addr_serv.sin_addr.s_addr = inaddr_any;

len = sizeof(addr_serv);

/* 繫結socket */

if(bind(sock_fd, (struct sockaddr *)&addr_serv, sizeof(addr_serv)) < 0)

int recv_num;

int send_num;

char send_buf[20] = "i am server!";

char recv_buf[20];

struct sockaddr_in addr_client;

int flag=0;

while(1)

if(strcmp(recv_buf,"receive")==0)

if(strcmp(send_buf,"receive")==0)

if(flag==1)

if(strcmp(recv_buf,"quit")==0)

if(strcmp(send_buf,"quit")==0)

} close(sock_fd);

return 0;

}

以下是windows系統下執行的客戶端**:

#include #include #pragma comment(lib,"ws2_32.lib")

#define buflen 1024

int main(int argc, char** argv)

addr.sin_family = af_inet;

addr.sin_addr.s_addr = inet_addr(argv[1]);

addr.sin_port = htons(4567);

bind(soc,(struct sockaddr *)&addr,sizeof(addr));

while(1)

else

if(strcmp(buf,"receive")==0)

if(strcmp(recvbuf,"receive")==0)

if(strcmp(buf,"quit")==0)

if(strcmp(recvbuf,"quit")==0)

} wsacleanup(); //clean up ws2_32.dll

return 0;

}

函式說明:因為是windows下的c程式設計,所使用的標頭檔案和函式名會有所差異,但函式所實現的功能是基本相同的。使用說明:先執行兩端的可執行檔案(windows裡需帶ip位址作引數,這樣程式設計的目的是為了方便程式的移植),正常狀態下windows端**做客戶端通過埠向linux端傳送資料,當傳送receive時,雙方交換角色,linux端向windows端傳送資料,當結束傳送時,無論出於什麼狀態,在傳送的那端輸入quit即可結束雙方的通訊。

指令碼實現linux和windows間的通知

依賴 windows下 plink putty包裡的乙個程式,用於ssh連線 linux下 ssh,samba服務ok linux下的shell指令碼,notify fifo bin sh fifo file tmp sshfifo if p fifo file then mkfifo fifo f...

linux與windows間socket通訊例項

linux端 include include include include include include include include define myport 3333 define backlog 10 main my addr.sin family af inet my addr.si...

linux和windows的區別

linux和windows的區別 linux windows linux介面 windows 介面 圖形介面風格根據發布版不同而不同,可能互不相容。gun linux的終端機是從unix傳承下來的,基本命令和操作方法也幾乎一樣 介面統一外殼程式固定程式選單幾乎一致,快捷鍵也幾乎相同 linux操作 ...