首页 > 编程语言 >Window下的socket编程(c++实现)

Window下的socket编程(c++实现)

时间:2023-06-23 18:13:11浏览次数:48  
标签:socket lib c++ Window SOCKET sockVersion include cout

参考

https://www.cnblogs.com/L-hq815/archive/2012/07/09/2583043.html

 

效果图:

 

Sever.cpp
点击查看代码
#include<winsock2.h>
#include<iostream>
#include<string>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

int main(int argc, char* argv[]) {

    //初始化DLL
    WORD sockVersion = MAKEWORD(2, 2);
    WSADATA wsdata;
    if (WSAStartup(sockVersion, &wsdata) != 0)
    {
        return 1;
    }

    //创建套接字
    SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (serverSocket == INVALID_SOCKET)
    {
        cout << "Socket error" << endl;
        return 1;
    }


    //绑定套接字
    sockaddr_in sockAddr;
    sockAddr.sin_family = AF_INET;
    sockAddr.sin_port = htons(8888);
    sockAddr.sin_addr.S_un.S_addr = INADDR_ANY;

    if (bind(serverSocket, (sockaddr*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR) {
        cout << "Bind error" << endl;
        return 1;
    }

    //开始监听
    if (listen(serverSocket, 10) == SOCKET_ERROR) {
        cout << "Listen error" << endl;
        return 1;
    }


    SOCKET clientSocket;
    sockaddr_in client_sin;
    char msg[100];//存储传送的消息
    int flag = 0;//是否已经连接上
    int len = sizeof(client_sin);
    while (true) {
        if (!flag)
            cout << "等待连接..." << endl;
        clientSocket = accept(serverSocket, (sockaddr*)&client_sin, &len);
        if (clientSocket == INVALID_SOCKET) {
            cout << "Accept error" << endl;
            flag = 0;
            return 1;
        }
        if (!flag)
            cout << "接收到一个链接:" << inet_ntoa(client_sin.sin_addr) << endl;
        flag = 1;
        int num = recv(clientSocket, msg, 100, 0);
        if (num > 0)
        {
            msg[num] = '\0';
            cout << "Client say: " << msg << endl;

        }

        string data;
        getline(cin, data);
        const char* sendData;
        sendData = data.c_str();
        send(clientSocket, sendData, strlen(sendData), 0);
        closesocket(clientSocket);
    }

    closesocket(serverSocket);
    WSACleanup();



    return 0;
}

Client.cpp

点击查看代码
#include<winsock2.h>
#include<iostream>
#include<string>
using namespace std;
#pragma comment(lib, "ws2_32.lib")

int main()
{
    WORD sockVersion = MAKEWORD(2, 2);
    WSADATA data;
    if (WSAStartup(sockVersion, &data) != 0)
    {
        return 1;
    }

    while (true) {
        SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (clientSocket == INVALID_SOCKET) {
            cout << "Socket error" << endl;
            return 1;
        }
        sockaddr_in sock_in;
        sock_in.sin_family = AF_INET;
        sock_in.sin_port = htons(8888);
        sock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        if (connect(clientSocket, (sockaddr*)&sock_in, sizeof(sock_in)) == SOCKET_ERROR) {
            cout << "Connect error" << endl;
            return 1;
        }

        string data;
        getline(cin, data);
        const char* msg;
        msg = data.c_str();
        send(clientSocket, msg, strlen(msg), 0);

        char revdata[100];
        int num = recv(clientSocket, revdata, 100, 0);
        if (num > 0) {
            revdata[num] = '\0';
            cout << "Sever say:" << revdata << endl;
        }
        closesocket(clientSocket);

    }

    WSACleanup();

    return 0;
}

标签:socket,lib,c++,Window,SOCKET,sockVersion,include,cout
From: https://www.cnblogs.com/moxiaozhi/p/17499451.html

相关文章

  • WGCLOUD在windows启动server - dos窗口显示乱码的问题解决
    首先,这个乱码没有影响,忽略即可这个是windows窗口编码导致的,不会影响程序运行,server/log下日志文件没有出现乱码,我们主要看日志文件如果我们想处理,也可以的,修改server/start.bat,添加一行命令,chcp65001,如下echo%cd%start/d"%cd%"wgcloud-daemon-release.exechcp65001java-......
  • C/C++经典面试题1(精心整理,附参考答案)
    1.说一下static关键字的作用2.说一下C++和C的区别(1)设计思想上(2)语法上3.说一说c++中四种cast转换(1)const_cast(2)static_cast(3)dynamic_cast(4)reinterpret_cast(5)为什么不使用C的强制转换?4.请说一下C/C++中指针和引用的区别?5.给定三角形ABC和一点P(x,y,......
  • 2021最新C++面试题(附答案)
    今天分享给大家的是比较全面的C/C++面试题,也都是C++版本升级之后,重新整理归纳的最新答案,会让C++面试者少走很多不必要的弯路。同时每个C++面试题都尽量做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分C++面试文档也是可以免费的提供给有需要的同学们学习的!博......
  • c++面试题(亲测常问)
    注意:此题为我自己面试被问到的,及一些摘抄的,如有侵权请联系我马上删除!1. 2.32位指针地址所占字节数为四举例说明:char*p;chartest[10];p=test;sizeof(p)=4(32位系统)//实质是求指针类型所占字节数,32位对应4字节,64位对应8字节sizeof(*p)=1//实质是求指针所指的内容所在......
  • C++面试题汇总
    目录1、C++三大特性1.1封装1.2继承1.3多态2、C++中map与unordered_map的区别3、unordered系列关联式容器4、STL常用函数,容器和使用容器的方法5、map的底层实现,存储的是什么,实现的时间复杂度6、虚函数6.1什么是虚函数6.2虚函数和纯虚函数的区别7、C++set和map......
  • 【十一】socketserver实现并发
    【十一】socketserver实现并发基于tcp的套接字,关键就是两个循环一个链接循环一个通信循环socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题)server类:request类:以下述代码为例,分析socketserver源码:ftpserver=socketserver.ThreadingTC......
  • c++面试常见问题总结
    近来在面试的过程,发现面试官在c++方面总是喜欢问及的一些相关问题总结,当时没怎么答出来,或者是答的不怎么全面,故而查询相关资料总结下。(后面实际工作会进行实时更新信息)<一>c++虚函数方面虚函数(VirtualFunction)是通过一张虚函数表(VirtualTable)来实现的。简称为V-Table。在......
  • c++面试知识整理
    C++基础部分1.基础知识1.1内存1.1.0内存四区1.1.1简述C、C++程序编译的内存分配情况1.1.2分配函数与释放函数1.2预编译1.2.1头文件<><><>和“““”””的问题1.2.2constconstconst与#definedefinedefine相比有什么优点1.3宏,内联函数1.3.1内联函数1......
  • (4)socket套接字使用模版
    socket套接字使用模版【一】客户端#-*-coding:Utf-8-*-#@File:客户端.py#author:Chimengmeng#blog_url:https://www.cnblogs.com/dream-ze/#Time:2023/6/22importjsonfromsocketimport*#解指定数据长度importstruct#创建socket对象client=s......
  • 【六】socket层
    【六】socket层Socket它到底在哪里呢?还是用图来说话,一目了然。【1】socket是什么Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面对用户来说,一组简单的接口就是全部......