使用XP寫服務程序:
1.包含頭文件
#include<WinSock2.h>//Winsock庫
#pragma comment(lib,"Ws2_32.lib")
2.UDP通訊代碼
//載入初始化winsock庫
WSADATA wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData);
//(1)創建UDP套接字sLocal
SOCKET sLocal = socket(
AF_INET,//地址家族,Winsock中必須爲AF_INET
SOCK_DGRAM,//SOCK_DGRAM表示UDP套接字
0);
//(2)綁定套接字
sockaddr_in addLocal;
addLocal.sin_family = AF_INET;//地址家族,Winsock中必須爲AF_INET
addLocal.sin_port = htons(8000);//端口,但是需要轉換爲網絡字節序
addLocal.sin_addr.S_un.S_addr = htonl(192.168.0.211);//本地任意IP地址INADDR_ANY
bind(sLocal,(sockaddr*)&addLocal,sizeof(sockaddr));
//(3)使用recvfrom與sendto收發數據
SOCKADDR_IN addrRemote;
int len = sizeof(SOCKADDR);
char buf[255] = {0};
while(1)
{
recvfrom(
sLocal,//通信套接字
buf,//接受數據的緩衝區
255,//緩衝區大小
0,//通常設置爲0
(SOCKADDR*)&addrRemote,//接受遠程地址
&len);//地址結構體大小
printf("%s/n",buf);
/*
sendto(
sLocal,//通信套接字
"Hello",//要發送的數據
sizeof("Hello"),//數據長度
0,//通常設置爲0
(SOCKADDR*)&addrRemote,//發送的地址
sizeof(SOCKADDR));//地址大小
*/
}
//(4)關閉套接字
closesocket(sLocal);
//卸載庫
WSACleanup();
下面是在WinCE下實現的客戶端程序
1.包含的頭文件
#include <WinSock2.h>//Winsock庫
#pragma comment(lib,"Ws2.lib")
2.UDP通訊代碼
WSADATA wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData);
//(1)創建UDP套接字sLocal
SOCKET sLocal = socket(
AF_INET,//地址家族,Winsock中必須爲AF_INET
SOCK_DGRAM,//SOCK_DGRAM表示UDP套接字
0);
//(2)使用recvfrom與sendto收發數據
SOCKADDR_IN addrRemote;
addrRemote.sin_family = AF_INET;//地址家族,Winsock中必須爲AF_INET
addrRemote.sin_port = htons(8000);//端口,不能爲依據打開的端口
addrRemote.sin_addr.S_un.S_addr = inet_addr("192.168.0.21");//服務器IP地址
int len = sizeof(SOCKADDR);
char buf[255] = {0};
sendto(
sLocal,//通信套接字
"Hello Server",//要發送的數據
sizeof("Hello Server"),//數據長度
0,//通常設置爲0
(SOCKADDR*)&addrRemote,//發送的地址
sizeof(SOCKADDR));//地址大小
printf("Hello Server");
/*
recvfrom(
sLocal,//通信套接字
buf,//接受數據的緩衝區
255,//緩衝區大小
0,//通常設置爲0
(SOCKADDR*)&addrRemote,//接受遠程地址
&len);//地址結構體大小
printf("%s/n",buf);
*/
while(1)
{
}
//(3)關閉套接字
closesocket(sLocal);
WSACleanup();