实验图片和前期准备:ubuntu作为服务端,windows客户端传输数据和文件:windows作为服务端,ubuntu作为客户端:
实验图片和前期准备:
服务端发送和接受i:
客户端接收服务端的时间:
设备:
自己的笔记本电脑和jetsonnano一台+显示屏
同一个wifi 查看ubuntu和windows的ip地址
注意:windows和ubuntu关闭防火墙!
ubuntu作为服务端,windows客户端传输数据和文件:
服务端用python(jetsonnano)
客户端用java写:(自己笔记本)
服务端接收到文件并输出:
代码
from socket import *import timefrom time import ctimehost='192.168.31.177'port=8189bufsiz=1024addr=(host,port)tcpServer=socket(AF_INET,SOCK_STREAM)tcpServer.bind(addr)tcpServer.listen(5)while True:print('wait for connection..')tcpCliServer,addr= tcpServer.accept()print('..connect from',addr)while True:data = tcpCliServer.recv(bufsiz).decode() #decode() 方法以 encoding 指定的编码格式解码字符串。默认编码为字符串编码。print(data)##str.decode(encoding='UTF-8',errors='strict') errors -- 设置不同错误的处理方案。if data == "yes":print("yee!")if not data:break#tcpCliServer.send('[%s]%s' % (bytes(ctime(),'utf-8'),str.encode(data)))tcpCliServer.send(bytes(ctime(), 'utf-8'))tcpCliServer.send(bytes("nice", 'utf-8'))#time.sleep(2)tcpCliServer.send(bytes("nn",'utf-8'));tcpCliServer.close()tcpServer.close()
客户端接收到的:
public static void main(String[]args) throws IOException {/* UdpClient udpClient = new UdpClient();try {udpClient.go();}catch (Exception e){System.out.println(e);}*/int i = 0;Socket socket = new Socket("192.168.31.177",8189);OutputStream outputStream = socket.getOutputStream();// OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);// outputStreamWriter.write(String.valueOf("我是中国人".getBytes(StandardCharsets.UTF_8)));File file = new File("D:\\Inventory.txt");DataOutputStream dataInputStream= new DataOutputStream(outputStream);FileInputStream fileInputStream = new FileInputStream(file);byte[]bytes = new byte[1024];try{dataInputStream.writeUTF(file.getName());dataInputStream.flush();System.out.println("传输文件");int len=0;while ((len = fileInputStream.read(bytes,0,bytes.length)) != -1){dataInputStream.write(bytes,0,bytes.length);dataInputStream.flush();}}catch (Exception e){System.out.println(e);}InputStream inputStream = socket.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream);outputStream.write("我是中国人yaoo".getBytes(StandardCharsets.UTF_8));char[] charArr = new char[1000];int readLen = -1;if((readLen = (inputStreamReader.read(charArr))) != -1) {while (i < 5) {i++;outputStream.write(("我是"+i).getBytes(StandardCharsets.UTF_8));String newString = new String(charArr, 0, readLen);System.out.println(newString);}dataInputStream.close();fileInputStream.close();outputStream.close();inputStream.close();socket.close();}}
windows作为服务端,ubuntu作为客户端:
自己笔记本作为服务端:
public class BeginThread extends Thread{private Socket socket;public BeginThread(Socket socket){super();this.socket = socket;}@Overridepublic void run(){try{InputStream inputStream = socket.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream);char[] charArr = new char[1000];int readLen = -1;while((readLen = (inputStreamReader.read(charArr))) != -1){String newString = new String(charArr,0,readLen);if(newString.matches("yes!"))System.out.println("成功收到来自客户端的数据");System.out.println(newString);}inputStreamReader.close();inputStream.close();//关闭两个流socket.close();//关闭socket}catch (IOException e){e.printStackTrace();}}}public class Server{public static void main(String[] args) throws IOException {ServerSocket socket = new ServerSocket(8888);int runTag = 1;while (runTag == 1){Socket socket1 = socket.accept();BeginThread beginThread = new BeginThread(socket1);beginThread.start();}socket.close();}
服务端接收到数据:
客户端:
import socket# 导入 socket 模块s = socket.socket() # 创建 socket 对象host = "192.168.31.131" # windows的ipport = 8888# 设置端口号s.connect((host, port))s.send('yes!'.encode('utf-8'))#发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。s.close()