1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件

【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件

时间:2018-11-19 05:47:04

相关推荐

【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件

实验图片和前期准备: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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。