当前位置: 首页 > news >正文

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

U参考来源

U

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

服务端代码

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

客户端代码

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

相关文章:

  • 设计模式之结构型模式
  • 通过 Prometheus 编写 TiDB 巡检脚本(脚本已开源,内附链接)
  • TCP/IP C 语言实现单个客户端和服务端 TCP 通信
  • 【FPGA开发】HDMI通信协议解析及FPGA实现
  • HiveSQL——共同使用ip的用户检测问题【自关联问题】
  • CVE-2022-25487 漏洞复现
  • 排序算法---计数排序
  • 安全基础~通用漏洞5
  • 【Spring2】从重构HelloWorld看Spring的作用
  • 面试经典150题——最小覆盖子串(困难)
  • 微信小程序(四十一)wechat-http的使用
  • Java解决下降路径最小和
  • C++数据结构与算法——双指针法
  • BatchNorm介绍:卷积神经网络中的BN
  • 鸿蒙系统优缺点,能否作为开发者选择
  • MySQL 基础知识(八)之用户权限管理
  • C#,21根火柴棍问题(21 Matchticks Problem)的算法与源代码
  • Netty Review - NioEventLoopGroup源码解析
  • 《CSS 简易速速上手小册》第4章:视觉美学(2024 最新版)
  • uniapp 开发一个密码管理app
  • 事关广大农民利益,农村集体经济组织法5月1日起施行
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿
  • 中国空间站首批在轨繁育果蝇即将返回地球,有望获得多项科学成果
  • 人到中年为何腰围变粗?科学家发现腹部脂肪增加的细胞元凶
  • 杭州一季度GDP为5715亿元,同比增长5.2%
  • 中公教育薪酬透视:董监高合计涨薪122万,员工精简近三成