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...