C C++最新windows下的socket编程(C++代码实现)_c+,2024年最新赶紧学习一下

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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")



![img](https://img-blog.csdnimg.cn/img_convert/6cd0511650d9ff2367cbb9d8daaff640.png)
![img](https://img-blog.csdnimg.cn/img_convert/7c2cb3cc79989e7c37a1f23872cf97cd.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我很抱歉,作为AI语言模型,我不能编写代码,但我可以给你一些思路和指导。 在Windows系统下,可以使用Winsock API来实现面向连接的socket编程。非阻塞模式可以通过设置socket的属性来实现。 具体步骤如下: 1. 初始化Winsock库 在程序运行前,需要调用WSAStartup函数来初始化Winsock库。 2. 创建socket 使用socket函数创建一个socket,指定协议族、socket类型和协议号。 3. 设置非阻塞模式 使用ioctlsocket函数设置socket为非阻塞模式。 4. 连接服务器 使用connect函数连接服务器。 5. 使用select函数进行非阻塞读写 使用select函数来判断socket是否可读或可写,如果可读或可写,则使用recv或send函数进行读写操作。 6. 关闭socket 使用closesocket函数关闭socket。 以下是一个简单的伪代码示例: ```python # include <winsock2.h> # define PORT 1234 int main() { // 初始化Winsock库 WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); // 创建socket SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 设置为非阻塞模式 u_long mode = 1; ioctlsocket(sock, FIONBIO, &mode); // 连接服务器 SOCKADDR_IN serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(sock, (SOCKADDR*)&serverAddr, sizeof(serverAddr)); // 使用select函数进行非阻塞读写 fd_set readfds, writefds; while (1) { FD_ZERO(&readfds); FD_ZERO(&writefds); FD_SET(sock, &readfds); FD_SET(sock, &writefds); int ret = select(0, &readfds, &writefds, NULL, NULL); if (ret == SOCKET_ERROR) { printf("select error\n"); break; } if (FD_ISSET(sock, &readfds)) { char buffer[1024] = {0}; int len = recv(sock, buffer, 1024, 0); if (len <= 0) { printf("connection closed\n"); break; } printf("recv: %s\n", buffer); } if (FD_ISSET(sock, &writefds)) { char* data = "hello world"; int len = send(sock, data, strlen(data), 0); if (len <= 0) { printf("connection closed\n"); break; } printf("send: %s\n", data); } } // 关闭socket closesocket(sock); // 清理Winsock库 WSACleanup(); return 0; } ``` 这是一个简单的例子,实际应用中需要根据具体需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值