internet 協議集支援乙個無連線的傳輸協議,該協議稱為使用者資料報協議(udp,user datagram protocol)。udp 為應用程式提供了一種無需建立連線就可以傳送封裝的 ip 資料報的方法。
首先認識幾個windows提供的結構體:
word:為微軟sdk中的型別,為兩個byte的無符號整數,可用makeword函式生成,語句為word wrd = makeword(blow,bhigh);
socket: 用於建立socket,可作為資料的接收端或發出端
sockaddr_in:該結構體指定了位址族(sin_family), 16位tcp/udp埠號(sin_port),32位ip位址(sin_addr),與保留的字元陣列char sin_zeros[8]
1.呼叫wsastartup函式,啟動windows sockets asynchronous,即windos非同步巢狀字,完成winsock服務初始化。
2.呼叫socket函式建立服務端socket,引數指明為udp通訊。
sserver = socket(af_inet, sock_dgram, ipproto_udp);
3.將該socket與sockaddr_in型別的資料變數通過bind函式繫結,該變數指定了socket的位址族、埠號與ip位址。
int
socket_init()
sserver =
socket
(af_inet, sock_dgram, ipproto_udp)
;//採用udp
if(sserver == invalid_socket)
addrserv.sin_family = af_inet;
addrserv.sin_port =
htons
(9990);
//相同的埠響應相同埠的請求
addrserv.sin_addr.s_un.s_addr =
htons
(inaddr_any)
; retval =
bind
(sserver,
(const sockaddr*
)&addrserv,
sizeof
(sockaddr_in));
if(retval == socket_error)
return0;
}
1.同樣呼叫wsastartup函式,完成winsock服務初始化。
2.呼叫socket函式建立服務端socket,引數指明為udp通訊。
shost = socket(af_inet, sock_dgram, ipproto_udp);
3.指明與該socket(shost)進行資料交換socket的位址,即需要定義乙個sockaddr_in型別的變數,指定服務端的位址族、埠號與ip位址
int
socket_init()
shost =
socket
(af_inet, sock_dgram, ipproto_udp)
;//udp
if(shost == invalid_socket)
addrserv.sin_family = af_inet;
addrserv.sin_port =
htons
(9990);
addrserv.sin_addr.s_un.s_addr =
inet_addr
("127.0.0.1");
int sserveraddrlen =
sizeof
(addrserv)
;return0;
}
在winsock實現的udp通訊中,我們通過sendto與recvfrom函式實現資訊的傳送與接收。
int sendto ( socket s ,
const
void
* msg,
int len,
unsigned
int flags,
const
struct sockaddr * to ,
int tolen )
;
在該函式中,s為資訊傳送端,msg為資訊首位址,len為長度,flags一般設為0,to指定接收資訊的socket位址資訊,tolen為位址資訊的長度。
int
recvfrom
(socket s,
void
*buf,
int len,
unsigned
int flags,
struct sockaddr *from,
int*fromlen)
;
recvfrom函式的引數與sendto基本相同,同樣需要指明傳送資訊的socket,接受資訊的socket位址資訊。
1.udp通訊是無連線的傳輸層協議,這通過其呼叫sendto與recvfrom函式時需要指定接收方就可以看出。
2.udp盡最大努力傳輸資料,但不能保證可靠交付。
3.udp傳輸相對較快,且支援一對
一、一對多、多對多的互動通訊.
利用WinSock實現簡單網路程式設計
利用winsock可以實現tcp udp協議通訊。我們知道,網路通訊要找三個位址即網路位址 主機位址 服務位址 埠號 通過機器的ip位址和子網掩碼計算可以得到網路和主機位址。而每個機器的服務位址 埠號 有65536個。下面就談一下怎樣利用winsock實現網路通訊。伺服器端程式編寫 建立乙個窗體,新...
利用UDP協議實現廣播通訊
在開發應用程式時,如果需要向網路中的所有使用者傳送資訊,可以採用udp協議進行廣播通訊,而不用一一向每個使用者傳送訊息。在程式中使用廣播通訊非常簡單,在建立套接字後,呼叫 setsockopt 方法使套接字具有so broadcast選項。然後再傳送訊息時,降低至設定為廣播形式。建立套接字 m ps...
Android利用Binder實現程序通訊
注意 reply.writenoexception 這個方法,服務端如果寫了這個方法,客戶端獲取服務端訊息也必須要寫reply.readexception 這個方法。必須成對出現,否則獲取不到服務端的訊息。public ibinder onbind intent intent class mybin...