三.udp的socket程式設計
先前的socket伺服器端與客戶端需要建立連線才能通訊,因此是面向連線的基於tcp的socket。而這裡的基於udp的socket是面向無連線的,也就是說不必呼叫 listen() 和 accept() 函式,那麼connect()函式也就一樣沒有使用的必要了。
udp新增的函式:
1.傳送資料sendto() 函式(相比send()函式多了最後面兩個引數)
函式原型:
int sendto(int s, const定義例項:void * buf, int len, unsigned int flags, const
struct sockaddr * to, int addrlen);
sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));2.接收資料recvfrom() 函式
函式原型:
int recvfrom(socket sock, char *buf, int nbytes, int flags, const定義例項:struct sockaddr *from, int *addrlen);
recvfrom(sock, buffer, buf_size, 0, &clntaddr, &nsize);伺服器:
#include #include客戶端:#include
#include
#pragma comment(lib,"ws2_32.lib")
using
namespace
std;
const
int port = 8000
;#define buf_size 100
intmain()
socket listensocket = socket(af_inet,sock_stream,0
);sockaddr_in listenaddr;
listenaddr.sin_family=af_inet;
listenaddr.sin_addr.s_un.s_addr=inaddr_any;
listenaddr.sin_port=htons(port);
intn;
n=bind(listensocket,(lpsockaddr)&listenaddr,sizeof
(listenaddr));
if(n==socket_error)
else
//接收客戶端
sockaddr clntaddr; //
客戶端位址資訊
int nsize = sizeof
(sockaddr);
char buffer[buf_size]; //
緩衝區while(1
)closesocket(listensocket);
wsacleanup();
return(0
);}
#include #include伺服器端接收到客戶端資訊以後發回給客戶端,客戶端列印接收到的訊息#include
#include
#pragma comment(lib,"ws2_32.lib")
using
namespace
std;
const
int port = 8001
;#define buf_size 100
intmain()
socket listensocket = socket(af_inet,sock_stream,0
);sockaddr_in listenaddr;
listenaddr.sin_family=af_inet;
listenaddr.sin_addr.s_un.s_addr=inaddr_any;
listenaddr.sin_port=htons(port);
intn;
n=bind(listensocket,(lpsockaddr)&listenaddr,sizeof
(listenaddr));
if(n==socket_error)
else
//伺服器位址資訊
sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr)); //
每個位元組都用0填充,可省略
servaddr.sin_family =pf_inet;
servaddr.sin_addr.s_addr = inet_addr("
127.0.0.1");
servaddr.sin_port = htons(1234
);
//不斷獲取使用者輸入並傳送給伺服器,然後接受伺服器資料
sockaddr fromaddr;
int addrlen = sizeof
(fromaddr);
while(1
); printf(
"input a string: ");
gets(buffer);
sendto(listensocket, buffer, strlen(buffer),
0, (struct sockaddr*)&servaddr, sizeof
(servaddr));
recvfrom(listensocket, buffer, buf_size,
0, &fromaddr, &addrlen);
cout
<
message from server:"}
closesocket(listensocket);
wsacleanup();
return(0
);}
執行結果
(待續)
WinSocket程式設計筆記(三)
二.kerberos協議的實現 現有alice as tgs bob,實現alice和bob的安全金鑰交換 這裡只實現alice和as之間的通訊 我把各個部分的 拆開來寫 1.隨機會話金鑰生成 include include using namespace std intmain 2.加密演算法 i...
WinSocket程式設計筆記(一)
前言 注 以下 都以c 環境為例 一.windows socket 基礎 windows socket dll的初始化和釋放函式的呼叫方法 windows socket 網路程式設計思路 1.初始化 windows socket 2.建立socket 3.將socket與位址結構繫結 4.傳送 接收...
winsocket程式設計例項
include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket socksrv socket af inet,sock stream,0 sockaddr in addrsrv addrs...