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 反饋的資訊,此時檢視網路路由,路由表正常,此時需要重新整理路由。事實...