ubuntu使用Vscode进行实现TCP编程

发布于:2024-09-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

在Ubuntu上使用VSCode实现TCP编程的完整流程包括安装必要的工具、编写TCP客户端和服务器代码、编译和运行程序。这里将介绍如何使用Python或C语言编写简单的TCP客户端和服务器,并在VSCode上运行。

1. 安装必要的工具

在Ubuntu上进行TCP编程前,需要确保已安装好VSCode、Python或GCC编译器(根据你使用的编程语言)。以下是相关工具的安装步骤。

1.1 安装 VSCode

如果还没有安装VSCode,可以通过以下命令进行安装:

sudo apt update
sudo apt install code
1.2 安装 Python3

如果计划使用Python进行TCP编程,通常Ubuntu已经自带Python3,可以通过以下命令确认是否已安装:

python3 --version

如果未安装,使用以下命令安装Python3:

sudo apt install python3
1.3 安装 GCC(用于 C/C++ TCP 编程)

如果计划使用C语言编写TCP程序,需要安装GCC编译器:

sudo apt update
sudo apt install build-essential

2. 安装 VSCode 扩展

打开VSCode后,安装相关的扩展,以支持Python或C/C++编程。

2.1 安装 Python 扩展

在VSCode中:

  1. 按下 Ctrl+Shift+P,输入 ext install ms-python.python,回车安装Python扩展。
  2. 安装完成后,VSCode将能够解析Python代码,提供语法高亮、调试和代码补全功能。
2.2 安装 C/C++ 扩展
  1. 按下 Ctrl+Shift+P,输入 ext install ms-vscode.cpptools,回车安装C/C++扩展。
  2. 安装完成后,VSCode将支持C/C++代码的语法检查和调试。

3. 编写 TCP 客户端和服务器程序

3.1 Python 实现
TCP 服务器(TCPServer.py
from socket import *

# 设置服务器端口
serverPort = 12000

# 创建TCP套接字
serverSocket = socket(AF_INET, SOCK_STREAM)

# 绑定套接字到服务器IP和端口
serverSocket.bind(('', serverPort))

# 开始监听客户端连接,最多允许1个客户端连接
serverSocket.listen(1)

# 提示服务器已准备好接收连接
print('The server is ready to receive')

# 无限循环,等待客户端连接
while True:
    # 接受客户端连接请求
    connectionSocket, addr = serverSocket.accept()
    
    # 接收客户端发送的数据
    sentence = connectionSocket.recv(1024).decode()
    
    # 将收到的消息转换为大写
    capitalizedSentence = sentence.upper()
    
    # 将处理后的消息发送回客户端
    connectionSocket.send(capitalizedSentence.encode())
    
    # 关闭连接套接字
    connectionSocket.close()
TCP 客户端(TCPClient.py
from socket import *

# 设置服务器地址和端口
serverName = 'localhost'  # 本地服务器
serverPort = 12000

# 创建TCP套接字
clientSocket = socket(AF_INET, SOCK_STREAM)

# 连接到服务器
clientSocket.connect((serverName, serverPort))

# 获取用户输入
sentence = input('Input lowercase sentence: ')

# 发送消息到服务器
clientSocket.send(sentence.encode())

# 接收服务器的响应
modifiedSentence = clientSocket.recv(1024)
print('From Server:', modifiedSentence.decode())

# 关闭套接字
clientSocket.close()
3.2 C 语言实现
TCP 服务器(tcp_server.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 12000
#define BUFFER_SIZE 1024

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[BUFFER_SIZE] = {0};
    char *response;

    // 创建TCP套接字
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_fd == 0) {
        perror("Socket failed");
        exit(EXIT_FAILURE);
    }

    // 绑定套接字到指定端口
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);

    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
        perror("Bind failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 开始监听
    if (listen(server_fd, 3) < 0) {
        perror("Listen failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    printf("Server is ready to receive\n");

    // 接受客户端连接
    new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
    if (new_socket < 0) {
        perror("Accept failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 读取客户端消息
    read(new_socket, buffer, BUFFER_SIZE);
    printf("Received: %s\n", buffer);

    // 将消息转换为大写并发送回客户端
    for (int i = 0; i < strlen(buffer); i++) {
        buffer[i] = toupper(buffer[i]);
    }
    send(new_socket, buffer, strlen(buffer), 0);

    // 关闭连接
    close(new_socket);
    close(server_fd);

    return 0;
}
TCP 客户端(tcp_client.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 12000
#define BUFFER_SIZE 1024

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    char *message = "hello server";
    char buffer[BUFFER_SIZE] = {0};

    // 创建TCP套接字
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        printf("Socket creation error\n");
        return -1;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);

    // 连接到服务器
    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        printf("Invalid address/ Address not supported\n");
        return -1;
    }

    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        printf("Connection failed\n");
        return -1;
    }

    // 发送消息到服务器
    send(sock, message, strlen(message), 0);
    printf("Message sent\n");

    // 接收来自服务器的消息
    read(sock, buffer, BUFFER_SIZE);
    printf("From Server: %s\n", buffer);

    // 关闭套接字
    close(sock);

    return 0;
}

4. 编译和运行

4.1 Python TCP 程序
  1. 启动服务器

    • 在VSCode终端中,导航到包含TCPServer.py的目录,并运行以下命令:
    python3 TCPServer.py
    
  2. 启动客户端

    • 打开一个新的VSCode终端,导航到包含TCPClient.py的目录,并运行以下命令:
    python3 TCPClient.py
    
4.2 C 语言 TCP 程序
  1. 编译服务器

    • 在VSCode终端中,导航到包含tcp_server.c的目录,并运行以下命令编译:
    gcc tcp_server.c -o tcp_server
    
  2. 编译客户端

    • 在VSCode终端中,导航到包含tcp_client.c的目录,并运行以下命令编译:
    gcc tcp_client.c -o tcp_client
    
  3. 启动服务器

    • 编译完成后,运行以下命令启动服务器:
    ./tcp_server
    
  4. 启动客户端

    • 在另一个VSCode终端中,运行以下命令启动客户端:
    ./tcp_client
    

5. 验证通信

  • 客户端会向服务器发送一条消息(Python实现中用户输入,C语言中是预定义的字符串),服务器会接收消息并将其转换为大写字母,然后将处理后的消息发送回客户端。客户端会接收到处理后的消息并显示。

网站公告

今日签到

点亮在社区的每一天
去签到