1、服务器
// vs_demo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#define LISTEN_PORT 5000
#define BUFFER_SIZE 1024
int server_daemon(){
WSADATA wsd;
SOCKET sock_listen;
int rc;
if(WSAStartup(MAKEWORD(2,2), &wsd) != 0){
printf("error:WSAStartup failed!\n");
return -1;
}
//create socket
sock_listen = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//Set SOCK_DGRAM and IPPROTO_UDP
if(INVALID_SOCKET == sock_listen){
printf("error:socket failed!\n");
WSACleanup();
return -2;
}
//set socket address
sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(LISTEN_PORT);
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//still bind socket
rc = bind(sock_listen,(const sockaddr*)&local_addr, sizeof(local_addr));
if(SOCKET_ERROR == rc){
int ec = WSAGetLastError();
printf("error:bind failed, err = %d!\n", ec);
closesocket(sock_listen);
WSACleanup();
return -3;
}
sockaddr_in from_addr;
int from_len = (int)sizeof(from_addr);
//recv data
char buffer[BUFFER_SIZE] = {0};
int buffer_len = sizeof(buffer);
memset(buffer, '#',sizeof(buffer));
rc = recvfrom(sock_listen, buffer, buffer_len, 0, (sockaddr*)&from_addr, &from_len);
char buffer2[BUFFER_SIZE] = {0};
int buffer2_len = sizeof(buffer2);
memset(buffer2, '#',sizeof(buffer2));
rc = recvfrom(sock_listen, buffer2, buffer2_len, 0, (sockaddr*)&from_addr, &from_len);//客户端sendto多少次,服务器端调用多少次的recvfrom
if(SOCKET_ERROR == rc){
int ec = WSAGetLastError();
printf("error:recv failed, err = %d!\n", ec);
closesocket(sock_listen);
WSACleanup();
return -4;
}
printf("[recv]: %s\n", buffer);
//exit
closesocket(sock_listen);
WSACleanup();
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
server_daemon();
getchar();
return 0;
}
2、客户端
// vs_demo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#define LISTEN_PORT 5000
#define BUFFER_SIZE 1024
int client_daemon(){
WSADATA wsd;
if(WSAStartup(MAKEWORD(2,2),&wsd) !=0){
printf("error:WSAStartup failed!\n");
return -1;
}
SOCKET sock_conn;
sock_conn = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//Set SOCK_DGRAM and IPPROTO_UDP
if(INVALID_SOCKET == sock_conn){
printf("error:socket failed!\n");
WSACleanup();
return -2;
}
//server address
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(LISTEN_PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//just sendto
int rc = -1;
char buffer[BUFFER_SIZE] = {0};
int buffer_len = 0;
strcpy_s(buffer, sizeof(buffer), "Hello,Server!");
buffer_len = (int) strlen(buffer);
rc = sendto(sock_conn, buffer, buffer_len, 0, (const sockaddr*)&server_addr, sizeof(server_addr));
ZeroMemory(buffer, sizeof(buffer));
strcpy_s(buffer, sizeof(buffer), "this is udp data!");
buffer_len = (int) strlen(buffer);
rc = sendto(sock_conn, buffer, buffer_len, 0, (const sockaddr*)&server_addr, sizeof(server_addr));
if(SOCKET_ERROR == rc){
printf("error:send failed!\n");
closesocket(sock_conn);
WSACleanup();
return -4;
}
printf("[send]: %s\n",buffer);
//close socket
closesocket(sock_conn);
WSACleanup();
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
client_daemon();
getchar();
return 0;
}