Linux系统(Ubuntu和树莓派)的远程操作练习

文章目录

一、实验一

(一)实验准备

1.双方应保证处于同一个局域网内
2.关闭防火墙

(否则别人将不能 ping 通自己,具体说明请参考:windows-关闭防火墙
3.配置虚拟机
​ (1)网桥模式配置

​ 查询本机网络连接中的网卡信息,当前本地连接的什么网络就选择哪张网卡(这里我用的无线网络)


(2)打开虚拟机,设置网络连接为:桥接模式

(3)在虚拟机菜单:编辑==>虚拟机网络编辑


(4)将VMnet0的网卡改为3(1)步windows下使用的网卡

(5)在控制台输入如下代码

(6)查看Ubuntu的网卡名称和虚拟机IP

网络名称:一般为ens33

虚拟机IP:192.168.167.109

子网掩码为:255.255.255.0

而此时树莓派IP为:192.168.167.177,windows电脑IP为:192.168.167.142

说明:虚拟机、树莓派和windows电脑在同一个局域网内,都是连的手机热点。

(二)Ubuntu 下的远程操作

1.创建一个新的用户并将其添加进sudo组,将分配的 IP 地址交给其他同学,让其他同学用 putty 或 xshell 连接

c 复制代码
sudo adduser classmate1
sudo usermod -aG sudo classmate1

切换用户 :使用终端命令:su - 用户名(需输入密码)

安装并启动 SSH 服务:

c 复制代码
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

使用putty登录classmate1

2.Xming 图形窗口访问

安装 Xming 和XLanuch,打开 XLanuch,默认一直下一页。

3.配置putty

(1)在配置选项 connection -> SSH -> X11 forwarding 处,将 Enable X11 forwarding 打钩

(2)然后 session->host name 处填写服务器IP 地址(即Ubuntu的IP地址),再点击 open 连接远程服务器

(3)连接成功后,输入命令 set DISPLAY:0=xxx.xxx.xxx.xxx ,(xxx.xxx.xxx.xxx是你所使用电脑windows下配置的IP地址)

(三)树莓派下的远程操作

1.只需要打开树莓派的vnc服务,然后连接过去即可

2.新建一个用户classmate2

c 复制代码
sudo adduser classmate2

用户名:"classmate2",密码:"123456"

3.Xming 图形窗口访问(具体操作如上所述,只需将服务器IP 地址修改为树莓派用户为 classmate2IP 地址)

(四)思考

X窗口协议与远程桌面VNC-viewer协议有什么差异?

X窗口协议与远程桌面VNC-viewer协议有什么差异?

二、实验二

1.talk程序

(1)方式一:邀请别人

邀请名称为 zhangsc 的用户进行对话


(2)被别人邀请

我接受zhangsc的邀请

(3)聊天过程

2. C 编写 Linux 进程间通信(IPC)聊天程序

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/chat_socket"

int main() {
    int server_fd, client_fd;
    struct sockaddr_un addr;
    char buffer[1024];

    // 创建 UNIX 域套接字
    server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
    if (server_fd == -1) {
        perror("socket error");
        exit(EXIT_FAILURE);
    }

    // 绑定套接字到文件路径
    memset(&addr, 0, sizeof(struct sockaddr_un));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);

    unlink(SOCKET_PATH); // 确保路径可用
    if (bind(server_fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
        perror("bind error");
        exit(EXIT_FAILURE);
    }

    // 监听并接受连接
    if (listen(server_fd, 5) == -1) {
        perror("listen error");
        exit(EXIT_FAILURE);
    }

    printf("Server waiting for connection...\n");
    client_fd = accept(server_fd, NULL, NULL);
    if (client_fd == -1) {
        perror("accept error");
        exit(EXIT_FAILURE);
    }

    // 双向聊天循环
    while (1) {
        printf("You: ");
        fgets(buffer, sizeof(buffer), stdin);
        write(client_fd, buffer, strlen(buffer) + 1);

        read(client_fd, buffer, sizeof(buffer));
        printf("Client: %s", buffer);
    }

    close(client_fd);
    close(server_fd);
    unlink(SOCKET_PATH);
    return 0;
}
cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/chat_socket"

int main() {
    int sockfd;
    struct sockaddr_un addr;
    char buffer[1024];

    // 创建并连接套接字
    sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if (sockfd == -1) {
        perror("socket error");
        exit(EXIT_FAILURE);
    }

    memset(&addr, 0, sizeof(struct sockaddr_un));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);

    if (connect(sockfd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
        perror("connect error");
        exit(EXIT_FAILURE);
    }

    // 双向聊天循环
    while (1) {
        read(sockfd, buffer, sizeof(buffer));
        printf("Server: %s", buffer);

        printf("You: ");
        fgets(buffer, sizeof(buffer), stdin);
        write(sockfd, buffer, strlen(buffer) + 1);
    }

    close(sockfd);
    return 0;
}
相关推荐
信创天地9 分钟前
深耕金融政务核心场景:国产化数据库迁移的全流程架构设计与风险管控
运维·网络安全·系统架构·系统安全·运维开发
ZFB000122 分钟前
【麒麟桌面系统】V10-SP1 2503 系统知识——添加用户
linux·运维·kylin
释怀不想释怀35 分钟前
Docker(网络)
运维·docker·容器
ZFB000139 分钟前
【麒麟桌面系统】V10-SP1 2503 系统知识——进入救援模式
linux·运维·kylin
RisunJan41 分钟前
Linux命令-iptables-restore命令(从文件批量恢复 iptables 防火墙规则)
linux·运维·网络
轻造科技1 小时前
周期压缩极限挑战:APS排产优化这样实现
运维·devops
鲨莎分不晴1 小时前
Nginx 部署前端项目实战指南
运维·前端·nginx
hugerat2 小时前
在AI的帮助下,用C++构造微型http server
linux·c++·人工智能·http·嵌入式·嵌入式linux
ha20428941943 小时前
Linux操作系统学习记录之----自定义协议(网络计算器)
linux·网络·学习
想唱rap3 小时前
MYSQL在ubuntu下的安装
linux·数据库·mysql·ubuntu