windows下IPv4通信(C++、MFC)
Cilect
#include <stdio.h>
#include <Ws2tcpip.h>
#include <winsock2.h>
#define HELLO_PORT 7905
#define HELLO_GROUP "224.0.0.1"
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
WSADATA wsaData;//初始化
//初始化Socket
WSAStartup(MAKEWORD(2, 2), &wsaData);
sockaddr_in RecvAddr; //服务器地址
sockaddr_in SenderAddr; //本地地址
int localPort = 4001; //本地监听端口
int Port = 4000; //服务器监听端口
char SendBuf[1024]; //发送数据的缓冲区
int BufLen = 1024; //缓冲区大小
//创建Socket对象
SOCKET SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//设置服务器地址
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
inet_pton(AF_INET, "127.0.0.1", &RecvAddr.sin_addr);
//绑定绑定监听端口
SenderAddr.sin_family = AF_INET;
SenderAddr.sin_port = htons(localPort);
SenderAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(SendSocket, (SOCKADDR*)&SenderAddr, sizeof(SenderAddr));
int l_naddLen1 = sizeof(SenderAddr);
printf("客户端发送:\n");
while (1)
{
strcpy_s(SendBuf, "hello");
int l_nLen = sendto(SendSocket, SendBuf, strlen(SendBuf), 0, (SOCKADDR*)&RecvAddr, sizeof(RecvAddr));
if (l_nLen < 0)
{
perror("发送失败");
exit(1);
}
printf("\nSend:");
for (int i = 0; i < strlen(SendBuf); i++)
{
printf("%02x ", (UCHAR)SendBuf[i]);
}
int l_nReadLen = recvfrom(SendSocket, SendBuf, BufLen, 0, (struct sockaddr*)&SenderAddr, &l_naddLen1);
printf("\nread:");
for (int i = 0; i < l_nReadLen; i++)
{
printf("%02x ", SendBuf[i]);
}
Sleep(1000);
}
//发送完成,关闭Socket
closesocket(SendSocket);
WSACleanup();
return 0;
}
Server
#include<WINSOCK2.H>
#include<iostream>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
int main()
{
WSADATA wsaData;//初始化
//初始化Socket
WSAStartup(MAKEWORD(2, 2), &wsaData);
sockaddr_in RecvAddr; //本地地址
sockaddr_in SenderAddr; //服务器地址
int Port = 4000; //本地监听地址
char RecvBuf[1024];//发送数据的缓冲区
int BufLen = 1024;//缓冲区大小
//创建接收数据报的socket
SOCKET RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//绑定本地监听地址
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(RecvSocket, (SOCKADDR*)&RecvAddr, sizeof(RecvAddr));
int SenderAddrSize = sizeof(SenderAddr);
printf("服务的接收:\n");
while (1)
{
strcpy_s(RecvBuf, "hello");
int l_nLen = recvfrom(RecvSocket, RecvBuf,BufLen, 0, (SOCKADDR*)&SenderAddr, &SenderAddrSize);
if (l_nLen < 0)
{
perror("发送失败");
exit(1);
}
printf("\nSend:");
for (int i = 0; i < strlen(RecvBuf); i++)
{
printf("%02x ", (UCHAR)RecvBuf[i]);
}
int l_nReadLen = sendto(RecvSocket, RecvBuf, strlen(RecvBuf), 0, (SOCKADDR*)&SenderAddr, SenderAddrSize);
printf("\nread:");
for (int i = 0; i < l_nReadLen; i++)
{
printf("%02x ", RecvBuf[i]);
}
Sleep(1000);
}
//调用Recvfrom函数在绑定的socket上接收数据
//关闭socket,结束接收数据
closesocket(RecvSocket);
//释放资源,退出
WSACleanup();
return 0;
}
windows下IPv4通信(C++、MFC)的更多相关文章
- 转:windows下多线程通信方法
多线程知识简介 同一进程中可以包含多个线程,由于进程中的多个线程可以共享进程中的资源,所以使同一进程中的多个线程之间通信相对比较简单. 当需要有多个线程来访问一个全局变量时,通常我们会在这个全局变量前 ...
- Linux下TCP网络编程与基于Windows下C#socket编程间通信
一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...
- windows下用c实现Socket通信
原文:windows下用c实现Socket通信 原本以为c是跨平台,所以,c在windows下和linux下的程序应该是类似于Java,什么都不用改变的,今儿才恍然大悟,他们的类库不一样啊-- 下面我 ...
- windows下进程间通信与线程间通信
进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...
- qt在windows下的udp通信(最简单)
qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...
- (8)Linux(客户端)和Windows(服务端)下socket通信实例
Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows Client端 #include <st ...
- 一个简单的Windows下的socket程序
服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...
- windows下端口映射(端口转发)
windows下端口映射(端口转发) 转载: https://blog.csdn.net/i1j2k3/article/details/70228043 本文是对网文的归纳整理,算不上原创,摸索过程亲 ...
- Windows下多线程编程(一)
前言 熟练掌握Windows下的多线程编程,能够让我们编写出更规范多线程代码,避免不要的异常.Windows下的多线程编程非常复杂,但是了解一些常用的特性,已经能够满足我们普通多线程对性能及其他要求. ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
随机推荐
- mmcls/mmdet模型部署至 TorchServe
mmcls/mmdet模型部署至 TorchServe 官方教程:模型部署至 TorchServe - MMClassification 0.23.2 文档 接口说明: serve/inference ...
- clearValidate()和resetFields()表单校验的用法和区别
目标:实现表单重置和清除验证 1.整个表单的校验移除 <Form ref="form" rule={this.rules}> <FormItem prop=&qu ...
- Vue-flask 展示小电影
显示小电影 前端Vue <body> <div id="app"> <button @click="handleLoad"> ...
- 深入理解MD5:Message Digest Algorithm 5
title: 深入理解MD5:Message Digest Algorithm 5 date: 2024/4/21 18:10:18 updated: 2024/4/21 18:10:18 tags: ...
- 【笔记】Oracle 窗口函数
Oracle 窗口函数 简单来说,窗口函数是分析函数的一种,通常可以理解成over()函数 构成:函数名①() over(partition by 分组的列名 order by 排序的列名 XXX) ...
- 【笔记】greatest/least函数&Round函数
刷了一下力扣,发现有很多的函数是自己不清楚的,用了这些函数是比较容易得出结果的,不用自己费心去实现一些奇怪的东西 1.最大最小值 链接:https://leetcode.cn/problems/num ...
- 当Java遇上机密计算,又一段奇幻之旅开始了!
简介: 汪少军:如何为Java业务提供机密计算保护? 写在前面 在信息世界里,数据存在三种状态: 存储态.传输态和计算态.存储在数据库或磁盘中的数据属于存储状态,在网络中传输的数据属于传输状态, ...
- 在线运行代码的 PHP 沙盒环境实现
演示: 多版本PHP运行代码 作用: 方便作为独立的调试环境运行 一些 临时逻辑,查看执行结果. 方便比较不同版本的 PHP 执行差异,进行一般的兼容性测试. 思路: Docker镜像构建多个PH ...
- [Go] go build 和 go install 的区别
$ go build 源文件及其包依赖 编译成二进制. install 不仅执行build过程 而且会把编译的二进制放到 $GOPATH/bin/,包放到 $GOPATH/pkg/ Link:http ...
- [TP5] 浅谈 ThinkPHP 的 Hook 行为事件及监听执行
TP5 中使用 \think\Hook::add('xx', '\app\xxx\behavior\Xx') 注册行为. 也可以在 application/tags.php 中统一注册. 在需要监听执 ...