winSock網路程式設計 協議的簡單示例(P)

2021-04-12 21:21:52 字數 2466 閱讀 6024

1.關於udp:

udp相對於tcp而言,它是不可靠的協議,不是有話說,「任何存在的東西總有其優點所在」嗎?udp雖然可靠性不夠高,但傳輸效率卻很高,速度也很快,所以用的也很多。

2.通訊前的注意工作:

因為採用基於windows套介面的程式設計,通訊前,要進行初始化windows sockets服務。

⑴用wsastartup()函式對windowssocketsdll進行初始化。

⑵在呼叫windock函式之前,需要載入wincock庫

#include "winsock.h"

#include "afxsock.h"

⑶wsastartup()與wsacleanup()是成對出現的,前者是分配資源,後者則是釋放資源。

3.採用c/s模型,先分析伺服器程式

if(m_hsocket!=null)

if(m_hsocket==null)

updatedata();

m_addr.sin_family=af_inet;

m_addr.sin_addr.s_un.s_addr=inaddr_any;

m_addr.sin_port=htons(m_port);//htons:主機位元組順序轉為網路位元組順序

int ret=0;

int error=0;

ret=bind(m_hsocket,(lpsockaddr)&m_addr,sizeof(m_addr));//繫結套接字到本機位址

if(ret==socket_error)//判斷繫結正確與否

char buff[256];

sockaddr_in from;

int fromlen=sizeof(from);

ret=recvfrom(m_hsocket,buff,256,0,(lpsockaddr)&from,&fromlen);//資料接收函式,引數5為[out],是源目的位址。

buff[ret]=0;

if(ret>0)

messagebox(buff);

else messagebox("沒有收到資料!");

char *buf=buff;

char *temp="-回執!";

strcat(buf,temp);

ret=sendto(m_hsocket,buf,strlen(buf),0,(lpsockaddr)&from,sizeof(from));//資料傳送函式

if(m_hsocket!=null)

closesocket(m_hsocket);//關閉套接字

4.客戶端程式如下:

if(m_hsocket!=null)

if(m_hsocket==null)

updatedata();

m_addr.sin_family=af_inet;

m_addr.sin_addr.s_un.s_addr=inet_addr(m_serverip.getbuffer(0));

m_addr.sin_port=htons(m_port);//htons:主機位元組順序轉為網路位元組順序

int ret=0;

int addrlen=sizeof(m_addr);

cstring str;

str += char(m_name.getlength());

str += m_name;

str += char(m_pass.getlength());

str += m_pass;

char* buf = str.getbuffer(0);

ret = sendto(m_hsocket, buf, str.getlength(),0,(lpsockaddr)&m_addr,addrlen);//資料傳送函式,注意全部的引數都是[in]

if(ret>0)

messagebox("資料已傳送...");

char buff[256];

ret = recvfrom(m_hsocket,buff,256,0,(lpsockaddr)&m_addr,&addrlen);//資料接受函式,引數5為[out],引數6為[in/out]

if(ret>0)

else

messagebox("沒有回執訊息,可能伺服器程式沒啟動!");

if(m_hsocket!=null)

closesocket(m_hsocket);//關閉套接字

5.總結:

tcp與udp協議,通訊過程要注意。

在伺服器程式中,tcp協議通訊中,需要呼叫listen()監聽,accept()準備接受連線,而udp中,則沒有這兩個函式,它只需要等待接受資料。

而在客戶端,tcp需要用到connect函式,udp不需要(如果用到connect,雖然後面的傳送和接受函式可以不用寫源目的位址,但其協議仍然是無連線的)。

Winsock網路程式設計的經典入門

網路通訊程式的開發,有許多概念,諸如 同步 sync 非同步 async 阻塞 block 非阻塞 unblock 等。同步方式指的是傳送方不等接收方響應,便接著發下個資料報的通訊方式 而非同步指傳送方發出資料後,等收到接收方發回的響應,才發下乙個資料報的通訊方式。阻塞套接字是指執行此套接字的網路呼...

winSock網路程式設計初體驗

在windows下進行tcp的socket程式設計主要有以下步驟 1.初始化wsa winsock word wversionrequested wsadata wsadata wversionrequested makeword 2,0 if wsastartup wversionrequeste...

WinSock網路程式設計基礎(1)

記錄學習windows網路程式設計過程中遇到的問題和相關筆記 socket起源於unix,socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。基於 開啟 讀 寫 關閉 模式,其中winsock就是變種之一 以下是乙個典型的c s中使用套接字介面的概述 winsock是wind...