Windows sockets网络开发-基本UDP套接字编程

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值