C++、python和go语言实现的简单客户端服务器代码示例

yizhihongxing

我们来详细讲解一下C++、Python和Go语言实现的简单客户端服务器代码示例。

C++ 实现简单客户端服务器

使用C++实现一个简单的客户端和服务器端交互的程序,可以使用TCP/IP协议,以下是一份C++实现简单客户端服务器的示例代码。

服务器端代码

#include <iostream>
#include <winsock2.h>

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

using namespace std;

int main()
{
    WSADATA wsaData;
    SOCKET sListen, sServer;
    sockaddr_in local, sin;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    local.sin_family = AF_INET;
    local.sin_port = htons(8080);
    local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

    bind(sListen, (struct sockaddr*)&local, sizeof(local));
    listen(sListen, 5);

    while (1)
    {
        cout << "Waiting for connection...\n";
        int nAddrLen = sizeof(sin);
        sServer = accept(sListen, (struct sockaddr*)&sin, &nAddrLen);
        cout << "Get a connection from " << inet_ntoa(sin.sin_addr) << ":" << ntohs(sin.sin_port) << endl;
        char szBuffer[1024] = { 0 };
        if (recv(sServer, szBuffer, 1024, 0) > 0)
        {
            cout << "Client send message: " << szBuffer << endl;
            send(sServer, szBuffer, strlen(szBuffer), 0);
        }
        shutdown(sServer, SD_BOTH);
        closesocket(sServer);
    }

    WSACleanup();
    return 0;
}

客户端代码

#include <iostream>
#include <winsock2.h>

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

using namespace std;

int main()
{
    WSADATA wsaData;
    SOCKET sClient;
    sockaddr_in sin;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    sin.sin_family = AF_INET;
    sin.sin_port = htons(8080);
    sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

    connect(sClient, (struct sockaddr*)&sin, sizeof(sin));

    char szMessage[] = "Hello World";
    send(sClient, szMessage, strlen(szMessage), 0);

    char szBuffer[1024] = { 0 };
    if (recv(sClient, szBuffer, 1024, 0) > 0)
        cout << "Get echo message: " << szBuffer << endl;

    closesocket(sClient);

    WSACleanup();
    return 0;
}

说明

以上是用C++实现的简单客户端服务器代码,以TCP/IP协议为例。在服务器端代码中,首先进行了Winsock库的初始化,然后创建一个套接字。之后,指定本地IP、端口以及套接字类型和协议。接下来,将套接字绑定到本地IP和端口并开始监听连接请求。如果有客户端请求连接,将会接收客户端连接并进行数据的收发。在客户端代码中也是先进行Winsock库的初始化,然后创建一个套接字,并指定服务器IP、端口和套接字类型和协议。接着,客户端连接到服务器并发送一个消息,等待服务器的响应,并打印出服务器的响应消息。

Python 实现简单客户端服务器

Python自带标准库 socket ,可以使用它来完成一个简单的客户端和服务器端交互程序。以下是一份Python实现的简单客户端服务器的示例代码。

服务器端代码

import socket

HOST = '127.0.0.1'
PORT = 8080

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()

    while True:
        print('Waiting for connection...')
        conn, addr = s.accept()
        with conn:
            print('Get a connection from', addr)
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                print('Client send message:', data.decode())
                conn.sendall(data)

客户端代码

import socket

HOST = '127.0.0.1'
PORT = 8080

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    message = 'Hello World'.encode()
    s.sendall(message)
    data = s.recv(1024)

print('Get echo message:', data.decode())

说明

以上是用Python实现的简单客户端服务器代码。在服务器端代码中,首先创建一个TCP套接字,并绑定到本地IP和端口。然后,服务器开始监听连接请求,如果有客户端请求连接,将会接收客户端连接并进行数据的收发。在客户端代码中也是先创建一个TCP套接字,并指定服务器IP、端口,然后客户端连接到服务器并发送一个消息,等待服务器的响应,并打印出服务器的响应消息。

Go 实现简单客户端服务器

使用Go语言实现一个简单的客户端和服务器端交互程序,以下是一份Go语言实现的简单客户端服务器的示例代码。

服务器端代码

package main

import (
    "fmt"
    "net"
)

const (
    HOST = ""
    PORT = "8080"
)

func main() {
    listener, _ := net.Listen("tcp", HOST+":"+PORT)
    defer listener.Close()

    fmt.Println("Waiting for connection...")
    for {
        conn, _ := listener.Accept()
        defer conn.Close()

        addr := conn.RemoteAddr().String()
        fmt.Println("Get a connection from", addr)

        buf := make([]byte, 1024)
        for {
            n, err := conn.Read(buf)
            if err != nil {
                fmt.Println("Client has closed the connection")
                break
            }
            fmt.Println("Client send message:", string(buf[:n]))
            conn.Write(buf[:n])
        }
    }
}

客户端代码

package main

import (
    "fmt"
    "net"
)

const (
    HOST = "127.0.0.1"
    PORT = "8080"
)

func main() {
    conn, _ := net.Dial("tcp", HOST+":"+PORT)
    defer conn.Close()

    message := []byte("Hello World")
    conn.Write(message)

    buf := make([]byte, 1024)
    n, _ := conn.Read(buf)

    fmt.Println("Get echo message:", string(buf[:n]))
}

说明

以上是用Go语言实现的简单客户端服务器代码。在服务器端代码中,首先创建一个TCP连接监听器,然后开始监听连接请求,如果有客户端请求连接,将会接收客户端连接并进行数据的收发。在客户端代码中也是先创建一个TCP连接器,并指定服务器IP、端口,然后客户端连接到服务器并发送一个消息,等待服务器的响应,并打印出服务器的响应消息。

总之,以上三种语言都可以实现简单的客户端和服务器端交互程序。其中,C++的Socket编程需要手动处理大量的系统底层API,相对比较复杂。Python和Go语言则是用标准库提供的接口进行简单封装,更易于上手。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++、python和go语言实现的简单客户端服务器代码示例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Linux命令行与图形界面切换方法

    以下是完整的攻略,涵盖了Linux命令行和图形界面之间的切换方法及示例说明。 Linux命令行和图形界面切换方法 Linux系统同时支持命令行和图形化界面,用户可以根据自己的需要在两者之间切换。下面我们来看看两种切换方式。 方法1: 使用快捷键 在Linux系统中,用户可以使用快捷键来快速切换命令行和图形化界面。常见的快捷键为Ctrl+Alt+F1~F6。 …

    other 2023年6月26日
    00
  • PhpStorm 如何优雅的调试Hyperf的方法步骤

    PHPStorm 是一款功能强大的 IDE,我们可以通过它快速地进行代码编辑、调试和测试。如果我们需要开发和调试 Hyperf 应用程序,这里介绍一种优雅的调试方法。 步骤: 安装 Hyperf Debug 插件 在代码编辑器 PHPStorm 中,找到 Settings -> Plugins 进入插件管理页面,搜索 Hyperf Debug 插件并安…

    other 2023年6月27日
    00
  • MySQL 5.7.9 服务无法启动-“NET HELPMSG 3534”的解决方法

    MySQL 5.7.9 服务无法启动-“NET HELPMSG 3534”的解决方法 当我们尝试启动MySQL 5.7.9服务时,可能会遇到以下错误: “error 1067 the process terminated unexpectedly”,然后我们通过命令行方式尝试手动启动该服务,而结果提示了 “NET HELPMSG 3534” 错误。如下所示:…

    other 2023年6月27日
    00
  • ios常见加密解密方法(RSA、DES 、AES、MD5)

    下面我来详细讲解一下”iOS常见加密解密方法(RSA、DES、AES、MD5)”的完整攻略。 RSA加密解密方法 RSA加密原理: RSA加密算法是一种非对称加密算法,加密和解密使用不同的密钥,分别称为公钥和私钥。公钥可以随意传播,任何人都可以获得,但私钥只有加密者才持有。加密时使用公钥进行加密,解密时使用私钥进行解密。 iOS中RSA加解密的步骤: (1)…

    other 2023年6月26日
    00
  • Java中自动生成构造方法详解

    Java中自动生成构造方法详解 Java是一种面向对象的编程语言,对象的创建离不开构造方法,Java中有很多种方法实现构造方法的自动化。 构造函数的作用 在了解如何自动生成构造方法之前,我们需要了解构造方法的作用。 构造方法是一个类的一种特殊函数,其作用是完成成员变量的初始化和对象的初始化工作。构造函数在对象被创建的时候自动调用,可以通过构造函数为对象的属性…

    other 2023年6月26日
    00
  • Java this super代码实例及使用方法总结

    让我来详细讲解一下“Java this super代码实例及使用方法总结”的完整攻略。 1. Java中this和super关键字的作用 在Java中,this和super是两个关键字,分别表示当前对象和父类对象。它们的作用主要有三个方面: 访问当前对象的成员变量和成员方法。 调用当前对象的构造方法和父类的构造方法。 传递当前对象和父类对象的引用。 2. J…

    other 2023年6月26日
    00
  • GHOST参数、命令操作指南

    GHOST参数详解 在命令行中调用 Ghost 时,可以使用以下参数对 Ghost 进行配置和优化: –no-prompt : 表示在运行时不显示提示信息 –development : 将 Ghost 配置为开发环境 –production : 将 Ghost 配置为生产环境 –db sqlite3 : 使用 SQLite3 作为数据库 –db m…

    other 2023年6月26日
    00
  • Angular.js中控制器之间的传值详解

    Angular.js中控制器之间的传值详解 在Angular.js中,控制器之间的传值是非常常见和重要的操作。下面将详细讲解如何在Angular.js中实现控制器之间的传值,并提供两个示例说明。 1. 使用服务(Service)进行传值 Angular.js中的服务是一个可被多个控制器共享的对象。通过在服务中定义变量或方法,我们可以在不同的控制器之间传递数据…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部