首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是简单的C或C++ TCP服务器和客户端示例?

简单的C或C++ TCP服务器和客户端示例通常包括以下几个步骤:

  1. 创建套接字
  2. 绑定地址和端口
  3. 监听连接请求
  4. 接受连接
  5. 发送和接收数据
  6. 关闭连接

以下是一个简单的C++ TCP服务器和客户端示例:

服务器端:

代码语言:cpp
复制
#include<iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include<thread>
#include<vector>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

void handleClient(SOCKET clientSocket) {
    char buf[1024];
    int len;

    while (true) {
        len = recv(clientSocket, buf, 1024, 0);
        if (len <= 0) break;
        send(clientSocket, buf, len, 0);
    }

    closesocket(clientSocket);
}

int main() {
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        cout << "WSAStartup failed: " << iResult<< endl;
        return 1;
    }

    SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (listenSocket == INVALID_SOCKET) {
        cout << "socket failed: " << WSAGetLastError()<< endl;
        WSACleanup();
        return 1;
    }

    sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = INADDR_ANY;
    service.sin_port = htons(8888);

    if (bind(listenSocket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) {
        cout << "bind failed: " << WSAGetLastError()<< endl;
        closesocket(listenSocket);
        WSACleanup();
        return 1;
    }

    if (listen(listenSocket, 5) == SOCKET_ERROR) {
        cout << "listen failed: " << WSAGetLastError()<< endl;
        closesocket(listenSocket);
        WSACleanup();
        return 1;
    }

    vector<thread> threads;

    while (true) {
        SOCKET clientSocket = accept(listenSocket, NULL, NULL);
        if (clientSocket == INVALID_SOCKET) {
            cout << "accept failed: " << WSAGetLastError()<< endl;
            break;
        }

        threads.push_back(thread(handleClient, clientSocket));
    }

    for (auto& t : threads) {
        t.join();
    }

    closesocket(listenSocket);
    WSACleanup();

    return 0;
}

客户端:

代码语言:cpp
复制
#include<iostream>
#include <winsock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main() {
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        cout << "WSAStartup failed: " << iResult<< endl;
        return 1;
    }

    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (clientSocket == INVALID_SOCKET) {
        cout << "socket failed: " << WSAGetLastError()<< endl;
        WSACleanup();
        return 1;
    }

    sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr("127.0.0.1");
    service.sin_port = htons(8888);

    if (connect(clientSocket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) {
        cout << "connect failed: " << WSAGetLastError()<< endl;
        closesocket(clientSocket);
        WSACleanup();
        return 1;
    }

    char buf[1024];
    int len;

    while (true) {
        cin.getline(buf, 1024);
        if (strcmp(buf, "exit") == 0) break;

        len = send(clientSocket, buf, strlen(buf), 0);
        if (len <= 0) break;

        len = recv(clientSocket, buf, 1024, 0);
        if (len <= 0) break;

        cout << "Server: "<< buf<< endl;
    }

    closesocket(clientSocket);
    WSACleanup();

    return 0;
}

这个示例展示了如何创建一个简单的C++ TCP服务器和客户端,它们可以互相发送和接收消息。请注意,这个示例仅适用于Windows操作系统,并且需要安装Winsock库。

相关搜索:在c++中同时播放'.wav‘音频和alsa-lib的简单示例?我可以与python服务器和c++客户端建立tcp/ip套接字吗?为什么python中的Grpc客户端比c#和c++客户端要快?如何在c++中将doubles列表作为客户端TCP发送到Matlab中的TCP服务器?什么是C字符串和C++字符串之间的区别?为什么在C++中调试和运行输出是不同的?在C++中测试一个数字是2的幂是最简单的方法是什么?Couchbase C SDK的Hello World示例中的键和值是做什么的?C++和C#中的实时服务器/客户端应用程序为什么python和c++的简单计算结果不一样?简单的C++写入文件在Mac OS X App中不起作用 - 为什么?(为什么是我?)为什么不传输(保存)文件?通过tcp在C#中的客户端和C中的服务器之间进行正确的连接?什么是托管和非托管C++混合的最佳单元测试工具?你能通过将Pydrake代码转换成C++版本来演示一个关于符号变量和雅可比的非常简单的C++示例吗?谓词和/或预测器数据成员和/或成员函数在C++中是如何工作的?(elem.*predicator)()在下面的代码片段中做了什么?通过C++编码的客户端和服务器读取、创建和操作TCP/IP网络通信中的完整帧什么是由GCC或Clang转换成的Objective-C 2.0类接口和实现在我的c++简单缓冲区代码中,exit 3和4的错误语句应该是什么?对于哪种类型的A和B,简单的赋值语句A=B在C++中是合法的,但在Java语言中不合法?为什么Erlang说比Web和C++更适合Webgames中的服务器端编程?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券