【NVIDIA JETSON AGX XAVIER】与个人笔记本(win11)建立TCP-IP连接传输数据(含源码)

本文详细描述了如何在PyCharm中通过Python编程在Xavier开发板和Windows笔记本间建立TCP-IP连接,包括设置Xavier联网、服务器端和客户端代码实现,以及遇到的问题和解决尝试。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

NVIDIA JETSON AGX XAVIER当作客户端
个人笔记本(win11)当作服务器
首先要将Xavier与笔记本通过网线连接起来,实现Xavier联网(两者可以相互ping通就可以)并且需要知道笔记本的ip地址(假如现在是192.168.0.1)

一、实现Xavier联网(相互ping通)

1.进入电脑的控制面板
在这里插入图片描述
点击网络和共享中心
在这里插入图片描述
点击更改配置器设置
在这里插入图片描述
选择“WLAN”,右键选择“属性”,选项卡选择“共享”,勾选上“允许其他网络用户通过此计算机的Internet连接来连接(N)”,再在“家庭网络连接(H)”中选择“以太网”
在这里插入图片描述
确定后Xavier上就会显示联网成功,如下图所示
在这里插入图片描述
可以进入浏览器查看是否有网,也可以在终端ping网站看能不能ping通。

联网成功后尝试笔记本和Xavier板子相互ping看能不能ping通
笔记本终端输入ipconfig
Xavier终端输入ifconfig
查看ip地址
在这里插入图片描述
在这里插入图片描述
相互ping通后可以执行下一步

二、Pycharm上编写python程序建立TCP-IP连接

假如现在服务器ip地址是192.168.0.1

1.服务器端代码(个人笔记本win11)

代码如下(示例):

import socket
import os

def send_file(filename, conn):
    if os.path.isfile(filename):
        # 发送文件存在确认消息
        conn.send(b'EXISTS ' + str(os.path.getsize(filename)).encode())
        user_response = conn.recv(1024).decode()
        if user_response[:2] == 'OK':
            with open(filename, 'rb') as f:
                bytes_to_send = f.read(1024)
                conn.send(bytes_to_send)
                while bytes_to_send != "":
                    bytes_to_send = f.read(1024)
                    conn.send(bytes_to_send)
    else:
        conn.send(b'ERR ')

def server_program():
    # 获取主机名
    host = socket.gethostname()
    port = 5001  # 初始化端口号
    server_socket = socket.socket()  # 获取socket对象
    server_socket.bind((host, port))  # 绑定地址到socket
    server_socket.listen(5)  # 监听连接,最多可接受5个连接
    print("服务器启动,等待连接...")
    conn, address = server_socket.accept()  # 接受新连接
    print("连接来自: " + str(address))
    while True:
        data = conn.recv(1024).decode()
        if not data:
            break
        send_file(data, conn)
    conn.close()  # 关闭连接

if __name__ == '__main__':
    server_program()

2.客户端代码(NVIDIA JETSON AGX XAVIER)

代码如下(示例):

import socket

def client_program():
    host = socket.gethostname()  # 服务器的主机名
    port = 5001  # 服务器的端口号

    client_socket = socket.socket()  # 实例化socket对象
    # client_socket.connect((host, port))  # 连接到服务器
    client_socket.connect(("192.168.0.1", port))  # 连接到服务器
    # 以太网适配器 以太网
    file_name = input("输入要传输的文件名: ")  # 用户输入文件名
    # C:\Users\li\Desktop\1.txt
    client_socket.send(file_name.encode())  # 发送文件名到服务器

    data = client_socket.recv(1024).decode()
    if data[:6] == 'EXISTS':
        file_size = int(data[6:])
        message = input("文件存在,大小为 " + str(file_size) + "Bytes,下载? (Y/N)? -> ")
        if message == 'Y':
            client_socket.send(b'OK')
            f = open('new_' + file_name, 'wb')
            data = client_socket.recv(1024)
            total_recv = len(data)
            f.write(data)
            while total_recv < file_size:
                data = client_socket.recv(1024)
                total_recv += len(data)
                f.write(data)
                print("{0:.2f}".format((total_recv/float(file_size))*100)+ "% Done")
            print("下载完成!")
            f.close()
        else:
            print("下载失败,请输入大写Y")
    else:
        print("文件不存在!")

    client_socket.close()  # 关闭连接

if __name__ == '__main__':
    client_program()

三、运行结果

1.服务器端(个人笔记本win11)

在这里插入图片描述

2.客户端(NVIDIA JETSON AGX XAVIER)

在这里插入图片描述

注意首先运行服务器端程序,再运行客户端程序

注意在客户端(Xavier板子)上输入要传输的文件名时,需要输入绝对地址,例如上图我输入的就是我的笔记本桌面文件地址,在输入Y时要输入大写Y才能成功下载文件。

下载好的文件地址在你当前的Xavier编写的代码的文件夹中可以找到。


未解决的问题

当我尝试将Xavier当作服务器,而个人笔记本当作客户端(win11),相当于两者调换一下角色,并且替换成了Xavier的ip地址后,运行程序,两者无法连接,客户端报错如下图所示:
在这里插入图片描述
两者可以相互ping通,并且刚才TCP-IP连接成功了,反复检查是否是Xavier的防火墙问题,发现Xavier并未安装防火墙,安装好后也并未开启防火墙。
再在网上反复寻找解决问题的方法—无果如果有哪位大佬知道如何解决请留言!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值