window下 UDP socket程式設計

2021-06-22 09:36:29 字數 2394 閱讀 3080

udp提供的是無連線的,不可靠的資料傳輸

伺服器端程式的編寫:

1、建立套接字(socket)  ,這裡udp的套接字型別為資料報套接字(socket_stream)

2、將套接字繫結到乙個本地ip位址和埠上(bind);

3、等待接收資料(recvfrom);

4、使用closesocket()函式關閉套接字。

客戶端程式的編寫:

1、建立套接字(socket);

2、向伺服器傳送資料(sendto);

3、使用closesocket()函式關閉套接字。

注意

1.在基於udp的套接字程式設計時,利用的是sendto和recvfrom這兩個函式實現資料的傳送和接收,而基於tcp的套接字程式設計時,傳送資料時調 用send函式,接收資料呼叫recv函式

2.套接字型別有三種:

sock_stream  流式套接字,適用於tcp

sock_dgram  資料報套接字,適用於udp

sock_raw        原始套接字,允許對低層協議如ip或icmp直接訪問,主要用於新的網路協議實現的測試

實現:客戶端向伺服器端發資料」data packet with id 1「,伺服器端收到該資料,伺服器端向客戶端發響應'hello,client,this is server!",客戶端也收到

client.c

//udp 不可靠,無連線

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

int main(int argc,char * argv)

socketfd=socket(af_inet,sock_dgram,0);

if(socketfd<0)

my_addr.sin_family=af_inet;//主機位元組序

my_addr.sin_port=htons(8000);//將主機的無符號整數(埠號)轉換為網路位元組順序

my_addr.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");//伺服器端埠和ip位址(這裡是使用的一台機器進行測試)

//bind()將套接字描述符,即套接字型大小與套接字位址關聯起來

/*if(bind(socketfd,(struct sockaddr *)&my_addr,sizeof(my_addr))==socket_error)

*/ //sendto

sprintf(buf,"data packet with id %d\n",count);

sendto(socketfd,buf,strlen(buf),0,(struct sockaddr *)&my_addr,sizeof(my_addr));//目地機的ip位址和埠號資訊

printf("本機往伺服器端傳送的資料為:\n%s\n",buf);

while(1) }

closesocket(socketfd);

wsacleanup();

return 0;

}

server.c

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

int main(void)

sersocket=socket(af_inet,sock_dgram,0);

if(sersocket<0)

ser_addr.sin_family=af_inet;

ser_addr.sin_port=htons(8000);//監聽的埠

ser_addr.sin_addr.s_un.s_addr=inaddr_any;//本機的埠號和ip位址

//bind()將套接字描述符,即套接字型大小與套接字位址關聯起來

if(bind(sersocket,(struct sockaddr *)&ser_addr,sizeof(ser_addr))<0)

while(1)

//伺服器端收到資料以後,要客戶端回送響應 "hello,client,this is server!"

sendto(sersocket,s2cdata,strlen(s2cdata),0,(struct sockaddr *)&ser_addr,sizeof(ser_addr));

printf("向客戶端傳送的資料為\n%s\n",s2cdata);

} closesocket(sersocket);

wsacleanup();

return 0;

}

window下 ORACL解除安裝

用oracle自帶的解除安裝程式不能從根本上解除安裝oracle,從而為下次的安裝留下隱患,那麼怎麼才能完全解除安裝oracle呢?那就是直接登錄檔清除,步驟如下 1 開始 設定 控制面板 管理工具 服務 停止所有oracle服務。2 開始 程式 oracle orahome81 oracle in...

linux下socket和window下區別

socket相關程式從windows移植到linux下需要注意的 1 標頭檔案 windows下winsock.h winsock2.h linux下sys socket.h 錯誤處理 errno.h 2 初始化 windows下需要用wsastartup linux下不需要 3 關閉socket ...

Window下雙網絡卡設定

一般情況下,在pc機上加上雙網絡卡和雙閘道器,邊可以輕鬆聯上兩個子系統。但由於windows自身系統原因,經常容易出現閘道器浮動或不穩定的情況,比如ping辦公自動化位址無法ping通,卻返回從192.168.97.10 路由器1 反饋的資訊,此時檢視網路路由,路由表正常,此時需要重新整理路由。事實...