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

我们来详细讲解一下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日

相关文章

  • C++对string进行大小写转换操作方法

    当使用C++编程语言时,可以使用以下方法对字符串进行大小写转换操作: 使用标准库函数std::transform:这个函数可以将字符串中的每个字符应用一个转换函数,并将结果存储在另一个容器中。对于大小写转换,可以使用std::toupper和std::tolower函数。下面是一个示例代码: #include <iostream> #includ…

    other 2023年8月16日
    00
  • 手机扩展内存和自带内存一样吗 扩展内存和自带内存哪个更好

    手机扩展内存和自带内存一样吗? 手机扩展内存和自带内存并不完全一样,它们有一些区别。下面将详细讲解这两者之间的差异。 自带内存 自带内存是指手机出厂时已经内置在手机中的存储空间。它通常是固定的,无法更改或扩展。自带内存的容量决定了手机可以存储的应用程序、媒体文件和其他数据的数量。较高容量的自带内存可以提供更大的存储空间,但也会增加手机的成本。 扩展内存 扩展…

    other 2023年8月1日
    00
  • vue之项目中如何封装loading加载效果

    在Vue项目中,封装loading加载效果可以提高页面交互体验,用户操作体验更加流畅。 以下是封装loading加载效果的完整攻略: 1. 创建全局Loading组件 我们可以使用Vue的全局组件来封装loading效果。首先,创建一个loading组件,例如: <template> <div class="loading-mas…

    other 2023年6月25日
    00
  • p2s、p2p、p2sp之对比

    p2s、p2p、p2sp之对比 在互联网技术发展的过程中,点对点通信技术成为一种备受关注的技术之一。p2p、p2s、p2sp正是近年来应用最广泛的三种点对点技术。它们都可以实现快速的下载、数据传输等功能,但是它们之间也存在一定的差异与区别。 p2p技术 p2p技术是peer-to-peer(对等网络)的缩写,指的是两台计算机之间的通信方式。p2p基于一个分布…

    其他 2023年3月29日
    00
  • Linux磁盘管理方法介绍

    Linux磁盘管理方法介绍 准备工作 在系统管理中,磁盘管理是至关重要的组成部分。在进行磁盘管理之前,我们需要有良好的准备工作。为了展示磁盘管理的过程,我们需要一个测试环境并安装fdisk工具。以下示例使用的Linux发行版为Ubuntu 20.04 LTS。 步骤1: 创建一个虚拟硬盘并将其附加到虚拟机 # 创建50GB虚拟磁盘 /dev/sdb $ qe…

    other 2023年6月27日
    00
  • 如何快速制作app应用软件

    当制作一个app应用软件时,以下是一些需要考虑和遵循的步骤: 1.明确目标和用户 在开始制作app之前,需要明确制作app的目标和用户。这将有助于你了解需要包含哪些功能以及如何为用户提供最佳的使用体验。 例如,假设你要开发一个订餐app,那么你需要考虑以下问题: 用户能否浏览菜单? 用户能否下订单? 用户能否支付订单? 用户能否跟踪订单状态? 关于目标和用户…

    other 2023年6月25日
    00
  • 易语言图形按钮控件的用法详解

    易语言图形按钮控件的用法详解 对于易语言程序员而言,实现图形界面操作是一个常见需求,此时图形按钮控件就成了必不可少的工具之一。本文将对易语言图形按钮控件的用法进行详解。 一、概述 图形按钮控件是一种用于图形界面中的按钮控件,它可以让用户通过单击按钮执行相应的操作。易语言中的图形按钮控件支持多种属性设置,包括按钮的位置、大小、文本、字体、背景色、前景色等。此外…

    other 2023年6月27日
    00
  • 别墅无线WiFi覆盖解决方案

    以下是“别墅无线WiFi覆盖解决方案”的完整攻略。 确定需求 在开始部署无线网络之前,首先需要明确别墅无线WiFi覆盖的需求。比如需要覆盖的面积、设备数量、无线速率要求等等。只有确定了需求,才能针对性的选择设备,并进行合理布局。例如,假设一个别墅共有三层,面积300平方米,需要支持10台以上的设备同时连接,而且需要稳定的高速无线网络。 设备选购 根据需求,需…

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