IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 端到端网络短信 -> 正文阅读

[C++知识库]端到端网络短信

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <signal.h>
using namespace std;

class Rec
{
public:
        int socketfd ;
        int acceptfd ;
        int len ;
        int pid ;
        int  init(char buf[255], int buf_len)
        {
                socketfd = socket(AF_INET, SOCK_STREAM, 0);
                if (socketfd == -1)
                        perror("socket error");
                else
                {
                        struct sockaddr_in s_addr;
                        s_addr.sin_family = AF_INET;
                        s_addr.sin_addr.s_addr = INADDR_ANY;
                        s_addr.sin_port = htons(12345);  //自定义端口号为12345
                        len = sizeof(s_addr);
                        int res = bind(socketfd, (struct sockaddr *)&s_addr, len);
                        if (res == -1)
                                perror("bind error");
                        else
                        {
                                if (listen(socketfd, 2) == -1)
                                        perror("listen error");
                                cout << "等待客户端上线" << endl;
                                pid = fork();
                                if (pid == 0){
                                        acceptfd = accept(socketfd, NULL, NULL);
                                        cout << "客户端上线" << endl;
                                        while(1)
                                        {
                                                int err = read(acceptfd, buf, buf_len);
                                                if ((strncmp(buf, "quit", 4) == 0) or (err == 0) )
                                                {
                                                        cout <<  "read err" << err << endl;
                                                        close(acceptfd);
                                                        close(socketfd);
                                                        return -1;
                                                }
                                                cout << "pid = " << getpid() << " 说: " << buf << endl;
                                        }
                                }

                        }
                }
        }
};

class Send
{
public:
        int socketfd;
        int len;

        void init()
        {
                socketfd = socket(AF_INET, SOCK_STREAM, 0);
                if (socketfd == -1)
                        perror("socket error");
                else
                {
                        struct sockaddr_in s_addr;
                        s_addr.sin_family = AF_INET;
                        s_addr.sin_addr.s_addr = inet_addr("192.168.0.251");
                        s_addr.sin_port = htons(12345);  //自定义端口号为12345
                        len = sizeof(s_addr);
                        int res = connect(socketfd, (struct sockaddr*)&s_addr, len);
                        while (res == -1)
                        {
                                sleep(1);
                                perror("connect error");
                                res = connect(socketfd, (struct sockaddr*)&s_addr, len);
                        }
                }

        }
        int sendmsg(char buf[255], int buf_len)
        {
                fgets(buf, buf_len, stdin);
                write(socketfd, buf, buf_len);
                if ((strncmp(buf, "quit", 4) == 0) )
                {
                        sleep(3);
                        close(socketfd);
                        return -1;
                }
        }
};

int main()
{

        char buf[255] = { 0 };
        Rec Recinst;
        Send Sendinst;
        Recinst.init(buf, sizeof(buf));
        Sendinst.init();
        while(1){
                if(Sendinst.sendmsg(buf, sizeof(buf)) == -1)
                {
                        kill(Recinst.pid,SIGKILL);
                        return -1;
                }
        }
}

buid.sh

#!/bin/bash
g++ ser.cpp  -o ser
g++ ser2.cpp -o ser2
./kill.sh

kill.sh

#!/bin/bash
kill_list=("cl" "ser" "ser2")
for pro in ${kill_list[@]}
do
        echo $pro "killed"
        ps -ef |grep  -w $pro |grep -v grep |awk '{print $2}' |xargs kill -9 >& /dev/null
done

scp.sh

#!/bin/bash
scp  -r $*  root@192.168.0.251:/root/day/

pssh.sh

#!/bin/bash
dir=`pwd`
pssh -H 192.168.0.251 -l root  -i  cd $dir; $*
$*

使用说明

本机使用:

1、cp -rf ser.cpp ser2cpp
2、ser2.cpp rec_port = ser.cpp send_port
3、ser2.cpp send_port = ser.cpp rec_port

双机使用:

1、ser.cpp copy到多机;
2、修改ip地址为目标机器Ip;
3、端口改为一样;

永久关闭防火墙步骤
1、移除防火墙服务
systemctl disable firewalld
2、启动停止防火墙服务
systemctl stop firewalld
3、关闭权限
vi /etc/selinux/config
SELINUX=disabled

关闭网卡,慎用

systemctl stop nework
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:55:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:00:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码