提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
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并未安装防火墙,安装好后也并未开启防火墙。
再在网上反复寻找解决问题的方法—无果,如果有哪位大佬知道如何解决请留言!!!