C 语言 devc++ 使用 winsock 实现 windows UDP 利用 IP 进行局域网发送消息

UDP 通信流程_udp通信过程-CSDN博客参考来源

UDP 通信流程_udp通信过程-CSDN博客

这里移植到windows 上 ,使用 devc++ 开发。

服务端代码

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <winsock2.h>

int main()
{
	WORD sockVersion = MAKEWORD(2, 2);
	WSADATA data;
	if (WSAStartup(sockVersion, &data) != 0)
	{
		return 0;
	}
	// 1. 创建通信的套接字
	SOCKET fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (fd == INVALID_SOCKET)
	{
		printf("无效的 socket !");
		return 0;
	}

	// 2. 通信的套接字和本地的IP与端口绑定
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(9999);    // 大端
	addr.sin_addr.s_addr = htonl(INADDR_ANY);  // 0.0.0.0
	int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
	if(ret == -1)
	{
		perror("bind");
		exit(0);
	}

	char buf[1024];
	struct sockaddr_in cliaddr;
	int len = sizeof(cliaddr);
	// 3. 通信
	while(1)
	{
		// 接收数据
		memset(buf, 0, sizeof(buf));
		int rlen = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr*)&cliaddr, &len);
		printf("客户端的IP地址: %s, 端口: %d\n",
		       inet_ntoa(cliaddr.sin_addr),
		       ntohs(cliaddr.sin_port));
		printf("客户端say: %s\n", buf);

		// 回复数据
		// 数据回复给了发送数据的客户端
		sendto(fd, buf, rlen, 0, (struct sockaddr*)&cliaddr, sizeof(cliaddr));
	}

	close(fd);

	return 0;
}

客户端代码

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <winsock2.h>

int main()
{
	WORD sockVersion = MAKEWORD(2, 2);
	WSADATA data;
	if (WSAStartup(sockVersion, &data) != 0)
	{
		return 0;
	}
	// 1. 创建通信的套接字
	SOCKET fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (fd == INVALID_SOCKET)
	{
		printf("无效的 socket !");
		return 0;
	}

	// 2. 通信的套接字和本地的IP与端口绑定
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(9999);    // 大端
//	addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);  // 255.255.255.255 广播 
	char loa[16] = "127.0.0.1";						// 这是指定 IP发送数据 
	addr.sin_addr.S_un.S_addr = inet_addr(loa);				// 加入指定 IP 


	char buf[1024];
    char ipbuf[64];
    int num = 0;
    // 2. 通信
    while(1)
    {
        sprintf(buf, "hello, udp %d....\n", num++);
        // 发送数据, 数据发送给了服务器
        sendto(fd, buf, strlen(buf)+1, 0, (struct sockaddr*)&addr, sizeof(addr));
 
        // 接收数据
        memset(buf, 0, sizeof(buf));
        recvfrom(fd, buf, sizeof(buf), 0, NULL, NULL);
        printf("服务器say: %s\n", buf);
        sleep(1);
    }
 
    close(fd);
 
    return 0;
}
相关推荐
国冶机电安装8 分钟前
其他弱电系统安装:从方案设计到落地施工的完整指南
大数据·运维·网络
m0_7381207216 分钟前
我的创作纪念日0328
java·网络·windows·python·web安全·php
安科士andxe1 小时前
实操指南|安科士EPON OLT光模块选型、部署与运维全流程解析
运维·服务器·网络
老前端的功夫1 小时前
【Java从入门到入土】21:List三剑客:ArrayList、LinkedList、Vector的爱恨情仇
java·javascript·网络·python·list
百度智能云技术站1 小时前
ClawHub 漏洞警示:官方商店失守,百度智能云守护小龙虾 Skill 供应链安全
网络·安全·web安全
薛定猫AI2 小时前
【深度解析】从 Claude Mythos 到自进化 Agent:下一代 AI 智能体技术栈与落地实践
网络·人工智能
okra-2 小时前
什么是接口?
服务器·前端·网络
DX_水位流量监测3 小时前
德希科技在线色度传感器
大数据·网络·人工智能·水质监测·水质传感器·水质厂家·农村供水水质监测方案
Blurpath住宅代理3 小时前
原生住宅IP深度解析:技术本质、优势边界与使用规范
网络·静态ip·动态ip·代理·代理ip·住宅ip·住宅代理
源远流长jerry3 小时前
软件定义网络 SDN 核心技术深度解析:从概念到实践
linux·网络·架构