C++socket编程(九):9.1 UDP实战Syslog服务器
1.配置linux系统日志。
2.在windows接收linux日志
3.通过正则表达式分析出危险操作并警告
首先我们先配置linux的转发
vim /etc/rsyslog.conf
这一样的IP地址是windows的ip*.* @192.168.16.79
然后重启rsyslog:service rsyslog restart。
xsyslog.cpp
#include "XUdp.h"
#incldue <iostream>using namespace std;int main(int argc,char *argv[])
{unsigned short por = 514;XUdp syslog;if (!syslog.Bind(port)){return -1;}char buf[2000] = {0};for (;;){int len = syslog.Recv(buf, sizeof(buf));if (len <= 0){continue;}buf[len] = '\0';cout << buf << endl;}return 0;
}
XUdp.h
//#pragma once
#ifndef _XTCP_H_
#define _XTPC_H_
#include <string>
class XUdp
{
public:XUdp();~XUdp();int CreateSocket();vpid Close();bool Bind(unsigned short port);char ip[16];unsigned short port = 0;int Recv(char* buf, int bufSize);protected:int sock = 0;
private:void* addr = NULL;
};#endif //_XTCH_H_
XUdp.cpp
#ifdef WIN32
#include <Windows.h>
#define socklen_t int
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#define closesocket close
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <thread>using namespace std;XUdp::XUdp()
{
#ifdef WIN32static bool first = true;if (first){first = false; //保证只进入一次WSADATA ws;WSAStartup(MAKEWORD(2, 2), &ws); //相当于加载了动态库,给引用增加1,这个只需要调用以此,但是需要调用在最前面}#endifmemset(ip, 0, sizeof(ip));}int XUdp::CreateSocket() //第一步创建socket
{sock = socket(AF_INET, SOCK_DGRAM, 0);if (sock == -1){printf("create socket failed!\n");}return sock;
}void XUdp::Close()
{if (sock <= 0)return;closesocket(sock);if (addr){delete addr;}addr = 0;sock = 0;
}bool XUdp::Bind(unsigned short port)
{if (sock <= 0)CreateSocket();//创建sockaddr_in saddr;saddr.sin_family = AF_INET; //协议saddr.sin_port = htons(port); //本地字节序转换为网络字节序saddr.sin_addr.s_addr = htonl(0); //任意ip地址发过来的数据都接收//绑定//用bind绑定,绑定哪一个端口if (::bind(sock, (sockaddr*)&saddr, sizeof(saddr)) != 0){printf("bind port %d failed!\n", port);return false;}printf("bind port %d success!\n", port);listen(sock, 10); //这个函数已经调用,就会告诉系统,这个socket可以通过这//个端口来跟它进行接收连接了//但是,连接的信息还会用到另外一个函数。10指的是在我这次获取连接信息的时候//最大支持多少个连接信息return true;
}int XUdp::Recv(char* buf, int bufsize)
{if (sock < 0)return 0;if (addr == NULL){addr = new sockaddr_in();}socklen_t len = sizeof();int re = recvfrom(sock, buf, bufSize, 0, (sockaddr*)addr, &len);return re;
}
C++socket编程(九):9.1 UDP实战Syslog服务器相关推荐
- python的基础网络编程是下列_Python入门基础之网络编程、socket编程、TCP、UDP编程...
忙了两天,继续更文!希望多多支持. 套接字 套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构.网络化的应用程序在开始任何通讯之前都必需要创建套接字. 套接字有三种: ...
- python监听多个udp端口_Python的Socket编程过程中实现UDP端口复用的实例分享
关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络 ...
- C++socket网络编程大全实战http服务器(支持php)视频课程-夏曹俊-专题视频课程
C++socket网络编程大全实战http服务器(支持php)视频课程-16782人已学习 课程介绍 C++socket网络编程大全实战http服务器(支持php)视频培训教程概况:本 ...
- asp.core api 通过socket和服务器通信发送udp_读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- socket 编程基础
网络模型 osi 参考模型,tcp/ip 参考模型 网络通讯要素 ip地址,端口号,传输协议 IP地址就是我想找到他的主机地址,但是如何区分是feiq 找他还是qq 找他用端口号区分,每一种进程的端口 ...
- 广播、组播 socket编程
目录 1.单播 / 广播 / 组播 的概念 (1) 单播 (2) 广播 (3) 多播(组播) 2.广播 socket编程(只能是UDP通信) 3.多播 socket编程(只能是UDP ...
- 读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- Socket 编程原理
目录 socket编程 基本概念 编程流程 socket函数 协议 TCP UDP DNS HTTP HTTPS socket编程 基本概念 socket编程即计算机网络编程,目的是使两台主机能够进行 ...
- Socket编程(C语言实现)——UDP协议(进程间通信AF_UNIX)的流式(SOCK_STREAM)+报式(SOCK_DGRAM)传输【循环监听】
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
最新文章
- 鲲鹏应用创新大赛山西区域赛圆满落幕,鲲鹏生态助力信创变革
- linux 记一次链路聚合
- 使用Xshell工具连接虚拟机
- linux 删除乱码的文件夹,Linux服务器删除乱码文件和文件夹的方法
- java怎么把system.out的东西输出到文件上
- Eclipse JPA Project创建
- iOS开发之解析XML格式数据
- Vue3源码之createApp
- 《我要进大厂》之mysql夺命连环13问
- 华为荣耀7i刷linux,奇兔刷机独家支持华为荣耀7i一键刷机 全网首发刷机ROM包
- 车载以太网转换器 100/1000BASE-T1 转换器
- css设置格子背景,跟本子一样
- Qt官方示例-虚拟键盘使用
- Qt5.12.x 导入CMakeLists.txt 工程 提示 No suitable kits found.
- 【SCI征稿】年底冲计算机神刊!最快1-2个月见刊!
- “serve with message ‘spawn vue-cli-service ENOENT”的解决办法
- 二叉树已知两种遍历结果求另一个遍历结果
- reactos 编译,安装篇
- Win10中Docker下修改mysql配置(主要修改utf-8字符集)
- K12在线教育平台的产品需求
热门文章
- JavaWEB过滤器和监听器技术
- SQLSERVER2008R2正确使用索引
- 教学楼电梯调度需求分析
- MySQL查询优化--细节理论
- Effective c++ 9 53...55
- 修改environment导致重启不能登录的问题解决
- 机器人电焊电流电压怎么调_西安焊接机器人工作站的主要设备有哪些?西安瑞斯曼...
- netbeans基于mysql学生信息_学生信息管理系统的设计与实现(NetBeans IDE,MySQL)
- linux如何更新数据包up,Linux更新(update/upgrade) 修改更新源
- C++ vector类的模拟实现