简易TCP客户端和服务器端通信

客户端:

#include<iostream>
#include <winsock2.h>  
#include <ws2tcpip.h>  
#include<stdlib.h>
using namespace std;

#define  BUF_SIZE  1024

int main()
{
    cout << "客户端" << endl;
    //设置Winsock版本,
    WSADATA   wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        cout << "error" << endl;
        exit(1);
    }


    //创建通信套接字
    SOCKET  hSocket; //创建用于通信的套接字
    char message[BUF_SIZE] = "hello world";
   

    //1,创建用于通信的套接字
    hSocket = socket(PF_INET, SOCK_STREAM, 0);
    if (hSocket == INVALID_SOCKET)
    {
        cout << "socket error" << endl;
        exit(1);
    }


    //2,连接服务器IP
    SOCKADDR_IN  servAdr;
    memset(&servAdr, 0, sizeof(servAdr));
    servAdr.sin_port = htons(9999);    //端口,主机转网络字节序,服务器端口
    servAdr.sin_family = AF_INET;      //地址族
     wchar_t  adr[] = L"192.168.19.1";
    InetPton(AF_INET, adr, &servAdr.sin_addr); // 服务器IP地址  
   
    
    //3,建立连接
    if (connect(hSocket, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
    {
        cout << "connect error" << endl;
        return 0;
    }


    //4,开始循环发送
    while (1)
    {
        int messagelen = strlen(message);
        send(hSocket, message, messagelen, 0);
        int Len = recv(hSocket, message, BUF_SIZE - 1, 0);
        message[Len] = 0;
        for (int i = 0; i < BUF_SIZE; i++)
        {
            cout << message[i];
        }
        cout << endl;
        Sleep(1000);
    }


    //5,关闭套接字
    closesocket(hSocket);
    WSACleanup();
}
 

服务器端

#include<iostream>
#include<stdlib.h>
#include<winsock2.h>
using namespace std;

int  main()
{
    cout << "服务器端" << endl;
    WSADATA  wsaData;
    SOCKET hServSock;  //监听套接字
    SOCKET hClntSock;  //接收(accept)套接字
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        cout << "WSAStartup  error" << endl;
    }


    //1,创建监听套接字
    hServSock = socket(PF_INET, SOCK_STREAM, 0);
    if (hServSock == INVALID_SOCKET)
    {
        cout << "申请发送套接字失败" << endl;
    }


    //2 ,绑定本地IP接口
    SOCKADDR_IN  servAdr;
    memset(&servAdr, 0, sizeof(servAdr));
    servAdr.sin_family = AF_INET;      //地址族
    servAdr.sin_port = htons(9999);    //端口,主机转网络字节序
    servAdr.sin_addr.s_addr = htonl(INADDR_ANY);  //绑定本地IP

    if (bind(hServSock, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
    {
        cout << "bind error" << endl;
    }


    //3, 设置监听
    if (listen(hServSock, 5) == SOCKET_ERROR)
    {
        cout << "listen error" << endl;
    }


    //4, 阻塞等待客户端连接
    SOCKADDR_IN  clntAdr;
    int clntAdrSize;
    clntAdrSize = sizeof(clntAdr);
    
    for (int i = 0; i < 5; i++)
    {
        hClntSock = accept(hServSock, (SOCKADDR*)&clntAdr, &clntAdrSize);
        if (hClntSock == -1)
        {
            cout << "accept(0 error" << endl;
        }
        else
        {
            cout << "connect client " << i + 1 << endl;
            char message[1024];
            int strlen;
            while ((strlen = recv(hClntSock, message, 1024, 0)) != 0)
            {
                for (int i = 0; i < strlen; i++)
                {
                    cout << message[i];
                }
                cout << endl;
                send(hClntSock, message, strlen, 0);
            }
        }
        Sleep(100);
        closesocket(hClntSock);
    }
    closesocket(hServSock);
    WSACleanup();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581287.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端复习资料

前端复习资料 落叶的位置&#xff0c;谱出一首诗&#xff0c;时间在消逝&#xff0c;我们的故事。 这篇文章呢&#xff0c;整理写给需要的前端同学的。 核心知识&#xff0c;必须掌握的&#xff0c;也是最基础的&#xff0c;譬如浏览器模型&#xff0c;渲染原理&#xff0c;JS…

网页模版如何用

现在的网页模版已经得到了许多人的喜爱和使用。随着人们对互联网的需求不断增加&#xff0c;更多的公司和组织需要拥有自己的网站&#xff0c;以推广他们的品牌和服务。而网页模版为他们提供了一个简单而高效的方法来创建自己的网站。 网页模版是预先设计好的网站模板&#xff…

【数据分析】NumPy

文章目录 [toc]ndarray的创建np.array()方法np.arange()方法np.zeros()方法np.ones()方法np.full()方法np.eye()方法np.random模块np.random.random()方法np.random.randint()方法np.random.choice()方法np.random.shuffle()方法 ndarray的属性ndarray.dtypendarray.ndimndarra…

初识BootStrap

目录 前言: 1.Bootstrap的特点包括&#xff1a; 1.1响应式设计&#xff1a; 1.2组件丰富&#xff1a; 1.3易于定制&#xff1a; 1.4兼容性良好&#xff1a; 1.5强大的社区支持&#xff1a; 1.6一致的样式和布局&#xff1a; 1.7 插件和扩展性 2.初识Ajax: 2.1同步请求…

Linux——(关于权限常见的3个问题)

文章目录 1.修改文件或者目录的拥有者和所属组1.1chown指令1.2chgrp指令 2.常见的权限三个问题2.1对应一个目录&#xff0c;如果要进入&#xff0c;需要什么权限&#xff1f;2.2为什么我们创建的文件默认权限不是7772.2.1关于Linux下的权限掩码 2.3文件能否被删除取决于什么2.3…

Paddle OCR v4 微调训练文字识别SVTRNet模型实践

文字识别步骤参考&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md 微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md 训练必要性 原始模型标点符号和括号容易识别不到 数据…

【kettle004】kettle访问本地MySQL数据库并处理数据至execl文件

一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 熟悉、梳理、总结下MySQL关系数据库相关知识体系 3.欢迎批评指正&#xff0c;跪谢一键三连&…

大模型微调:技术迭代与实践指南

在人工智能领域&#xff0c;大模型&#xff08;LLM&#xff09;的微调是一个关键过程&#xff0c;它使模型能够适应特定的任务和数据集。微调是深度学习中用于改进预训练模型性能的重要技术。通过在特定任务的数据集上继续训练&#xff0c;模型的权重被更新以更好地适应该任务。…

揭秘工业大模型:从人工智能小白到技术先锋

工业大模型的五个基本问题 信息化时代&#xff0c;数字化转型成为企业提升营运效率、应对经营风险和提升核心竞争力的重要途径。在此过程中&#xff0c;数据作为一种客观存在的资源&#xff0c;所产生的价值日益凸显。党的十九届四中全会从国家治理体系和治理能力现代化的高度将…

详解Qt绘图机制

Qt框架以其强大的图形界面功能著称&#xff0c;其中绘图机制是构建丰富视觉效果的关键。本文将详细介绍Qt中的绘图机制&#xff0c;包括绘图基础、绘图设备、绘图工具及高级特性&#xff0c;并通过实战C代码示例&#xff0c;带你领略Qt绘图的魅力。 绘图基础 Qt的绘图操作主要…

vs2019 - release版中_DEBUG宏生效的问题

文章目录 vs2019 - release版中_DEBUG宏生效的问题概述笔记总结END vs2019 - release版中_DEBUG宏生效的问题 概述 在加固程序&#xff0c;需要去掉PE的字符串表中和逻辑相关的字符串。 编译成release版后&#xff0c;用IDA看&#xff0c;还是发现有debug版才有的字符串。 那…

gitee关联picgo设置自己的typora_图床

一&#xff1a;去gitee官网创建仓库&#xff1a;typora_图床 1.百度搜索关键字&#xff1a;gitee&#xff0c;进入官网 2.进入gitee登录或者注册自己的账号 3.进入主页后&#xff0c;点击右上方 4.点击新建仓库 5.设置仓库名&#xff1a;typora_图床 6.点击5的创建&#xff0…

<计算机网络自顶向下> Internet Protocol(未完成)

互联网中的网络层 IP数据报格式 ver: 四个比特的版本号&#xff08;IPV4 0100, IPV6 0110&#xff09; headlen&#xff1a;head的长度&#xff08;头部长度字段&#xff08;IHL&#xff09;指定了头部的长度&#xff0c;以32位字&#xff08;4字节&#xff09;为单位计算。这…

echarts实现水滴图

使用echarts实现水滴图 引入依赖&#xff0c;echarts-liquidfill3兼容echarts5; 安装依赖 "echarts": "^5.4.3","echarts-liquidfill": "^3.1.0",npm install echarts-liquidfill3.1.0 -S实现的效果图 构建一个水滴图的页面 <tem…

基于Spring Boot的商务安全邮件收发系统设计与实现

基于Spring Boot的商务安全邮件收发系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 已发送效果图&#xff0c;用户可以对已发送信息…

4.28总结

对部分代码进行了修改&#xff0c;将一些代码封装成方法&#xff0c;实现了头像功能&#xff0c;创建一个本地字节输入流 fileinputSteam 对象&#xff0c;构造方法中绑定读取的数据源&#xff0c;创建一个socket对象&#xff0c;构造方法中绑定服务器的IP地址和端口号使用sock…

Kafka(十二)Streams

目录 Streams1 什么式是流式处理2 流式处理的相关概念2.1 拓扑2.2 时间2.2.1 输入时间2.2.2 输出时间 2.3 状态2.4 流和表2.5 时间窗口2.5.1 测试时间窗口 2.6 处理保证 3 流式处理设计模式3.1 单事件处理3.2 使用本地状态3.3 多阶段处理和重分区3.4 使用外部查找&#xff1a;流…

阿里云操作日记

昨天买了一个超级便宜的阿里云服务器&#xff0c;2核2G&#xff0c;3M固定带宽&#xff0c;40G ESSD Entry云盘&#xff0c;搭载一个简单的系统&#xff0c;就想到了docker轻量级&#xff0c;易于管理 其实docker很好用&#xff0c;第一步就是安装docker 一、docker安装与端口…

Python快速入门1数据类型(需要具有编程基础)

数据类型&#xff1a; Python 3.0版本中常见的数据类型有六种&#xff1a; 不可变数据类型可变数据类型Number&#xff08;数字&#xff09;List&#xff08;列表&#xff09;String&#xff08;字符串&#xff09;Dictionary&#xff08;字典&#xff09;Tuple&#xff08;元…

python学习笔记----循环语句(四)

一、while循环 为什么学习循环语句 循环在程序中同判断一样&#xff0c;也是广泛存在的&#xff0c;是非常多功能实现的基础&#xff1a; 1.1 while循环语法 while 条件表达式:# 循环体# 执行代码这里&#xff0c;“条件表达式”是每次循环开始前都会评估的表达式。如果条件…
最新文章