




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告設(shè)計(jì)名稱: 雙機(jī)通信IP數(shù)據(jù)包的解析專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)(交通信息工程)班 級(jí): 201324020311姓 名: 李 俊指導(dǎo)教師: 徐 麗2015 年 12 月 26 日課設(shè)一:雙機(jī)通信2摘要:2一、 引言31、課程設(shè)計(jì)目的:32、課程設(shè)計(jì)要求:3二、 設(shè)計(jì)原理3三、 程序代碼設(shè)計(jì)流程41、服務(wù)器流程圖42、.客戶端流程圖:4四、 結(jié)果及分析4運(yùn)行結(jié)果:42、分析:5五、 源代碼51. MainServer.java52. Server.java83. MainClient.java94. Client.java125.Constant.java13課設(shè)二:IP包
2、的解析14摘要:14一、引言141、課程設(shè)計(jì)目的:142、課程設(shè)計(jì)要求:14二、設(shè)計(jì)原理14三、程序代碼設(shè)計(jì)流程15四、結(jié)果及分析161、運(yùn)行結(jié)果162、分析16五、源代碼16課設(shè)一:雙機(jī)通信摘要:網(wǎng)絡(luò)技術(shù)的發(fā)展非常迅速,在企業(yè)、機(jī)關(guān)、學(xué)校的信息管理與服務(wù)領(lǐng)域得到廣泛的應(yīng)用。隨著網(wǎng)絡(luò)體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn)研究的進(jìn)展、操作系統(tǒng)的發(fā)展以及光纖技術(shù)的引入,網(wǎng)絡(luò)通信技術(shù)得到了快速發(fā)展。目前,網(wǎng)絡(luò)分層結(jié)構(gòu)使用最多的就是TCP/IP架構(gòu),作為TCP/IP架構(gòu)的重要支柱TCP協(xié)議在網(wǎng)絡(luò)的發(fā)展中起到了至關(guān)重要的作用,TCP協(xié)議處于TCP/IP架構(gòu)的傳輸層,其在IP層的基礎(chǔ)上,向應(yīng)用層用戶進(jìn)程提供可靠的、全雙工的數(shù)
3、據(jù)流傳輸。 關(guān)鍵詞 TCP;傳輸層;java ;雙機(jī)即時(shí)通信 1、 引言網(wǎng)絡(luò)技術(shù)的發(fā)展非常迅速,在企業(yè)、機(jī)關(guān)、學(xué)校的信息管理與服務(wù)領(lǐng)域得到廣泛的應(yīng)用。隨著網(wǎng)絡(luò)體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn)研究的進(jìn)展、操作系統(tǒng)的發(fā)展以及光纖技術(shù)的引入,網(wǎng)絡(luò)技術(shù)得到了快速發(fā)展。目前網(wǎng)絡(luò)的使用覆蓋全社會(huì)的各個(gè)角落。因此,學(xué)習(xí)TCP傳輸技術(shù)對(duì)深入掌握網(wǎng)絡(luò)知識(shí)是非常重要的。1、課程設(shè)計(jì)目的:使用套接字socket建立一個(gè)簡(jiǎn)單的基于TCP的客戶/服務(wù)器形式的網(wǎng)絡(luò)程序了解面向連接的通信原理2、課程設(shè)計(jì)要求:(1)服務(wù)器端的搭建(2)客戶端的搭建(3)實(shí)現(xiàn)雙機(jī)通信3、設(shè)計(jì)平臺(tái)JVM2、 設(shè)計(jì)原理客戶機(jī)/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)
4、請(qǐng)示的方式。(1) 首先服務(wù)器要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù),過(guò)程如下:a) 打開(kāi)通信通道并告知本地主機(jī),它愿意在某個(gè)公認(rèn)地地址上接受客戶的請(qǐng)求。b) 等待客戶請(qǐng)求到達(dá)該端口。c) 接受到重復(fù)請(qǐng)求服務(wù),處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。d) 返回第二部等待另一客戶請(qǐng)求。e) 關(guān)閉服務(wù)器(2) 客戶機(jī)啟動(dòng)后,向服務(wù)器發(fā)出請(qǐng)求,過(guò)程如下:a) 打開(kāi)通道信號(hào),并連接到服務(wù)器所在主機(jī)的特定端口b) 向服務(wù)器發(fā)送服務(wù)請(qǐng)求,等待并接受應(yīng)答;繼續(xù)提出請(qǐng)求。c) 請(qǐng)求結(jié)束后關(guān)閉通道并終止。3、 程序代碼設(shè)計(jì)流程1、服務(wù)器流程圖啟動(dòng)服務(wù)器等待客戶請(qǐng)求通信 Y N關(guān)閉服務(wù)器2、.客戶端流程圖:?jiǎn)?dòng)客戶機(jī)等待服務(wù)器連接通
5、信 Y N關(guān)閉客戶機(jī)4、 結(jié)果及分析運(yùn)行結(jié)果:2、分析:服務(wù)器和一直在等待客戶機(jī)的連接,知道有客戶機(jī)接入;客戶機(jī)一直在請(qǐng)求服務(wù)器,知道服務(wù)器響應(yīng);當(dāng)兩者條件同時(shí)滿足,TCP建立一條通道,可以進(jìn)行通信。5、 源代碼1. MainServer.java/*MainServer.java*/import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt
6、.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import java.io.ObjectOutputStream;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import j
7、avax.swing.JTextField;public class MainServer extends JFrame private JScrollPane scrollPane1;private JTextArea ta_show;private JPanel panel1;private JTextField tf_message;private JButton btn_send;private final int SHOW_ROWS = 11;private ObjectOutputStream out;public MainServer() initComponents();pri
8、vate void initComponents() scrollPane1 = new JScrollPane();ta_show = new JTextArea();panel1 = new JPanel();tf_message = new JTextField();btn_send = new JButton();setTitle("Server-服務(wù)器端程序");addWindowListener(new WindowAdapter() public void WindowsClosing(WindowEvent e) thisGraphicClosing(e);
9、);Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout();ta_show.setRows(SHOW_ROWS);ta_show.setEditable(false);scrollPane1.setViewportView(ta_show);contentPane.add(scrollPane1, BorderLayout.SOUTH);panel1.setLayout(new FlowLayout();/ - tf_message -tf_message.setPreferredSiz
10、e(new Dimension(320, 25);panel1.add(tf_message);/ - btn_send -btn_send.setText("Send");btn_send.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) btn_sendActionPerformed(e););panel1.add(btn_send);contentPane.add(panel1, BorderLayout.NORTH);pack();setLocation
11、RelativeTo(getOwner();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);private void btn_sendActionPerformed(ActionEvent e) try out.writeObject(tf_message.getText();out.flush();show("服務(wù)器端>> " +tf_message.getText();tf_message.setText(""); catch (IOException ie) ie.printStackTra
12、ce();private void thisGraphicClosing(WindowEvent e) if (out != null) try out.writeObject(Constant.CONNECT_QUIT);out.flush(); catch (IOException ie) ie.printStackTrace();public void setOut(ObjectOutputStream out) this.out = out;public void show(String mess) ta_show.append(mess + "n");ta_sho
13、w.setCaretPosition(ta_show.getText().length();2. Server.java/*Server.java*/import java.io.EOFException;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .ServerSocket;import .Socket;public class Server private MainServer frame;private ObjectOutputSt
14、ream out;private ObjectInputStream in;private ServerSocket serverSocket;private Socket socket;private int counter = 1;public Server() frame = new MainServer();frame.setVisible(true);server_start();private void server_start() try serverSocket = new ServerSocket(Constant.LISTEN_PORT, 20);while (true)
15、/ 等待連接frame.show("等待連接,請(qǐng)稍候");socket = serverSocket.accept();/ 建立連接frame.show("已與客戶端" + socket.getInetAddress().getHostName()+ "建立連接!");frame.show("-");out = new ObjectOutputStream(socket.getOutputStream();/frame.show(String(out);/frame.show();frame.setOut(out)
16、;/out.writeObject("服務(wù)器端>> 連接成功");out.flush();/ 保持通信in = new ObjectInputStream(socket.getInputStream();String messagein = ""while (true) try messagein = (String) in.readObject();System.out.println(messagein);if (messagein.equals(Constant.CONNECT_QUIT) frame.setOut(null);brea
17、k;frame.show("客戶端>> " + messagein); catch (Exception e) e.printStackTrace();/ 結(jié)束連接frame.show("客戶端" + socket.getInetAddress().getHostName()+ "中斷了連接!");out.close();in.close();socket.close();+counter; catch (EOFException eofException) eofException.printStackTrace();
18、catch (IOException ioException) ioException.printStackTrace();/ main()方法public static void main(String args) new Server();3. MainClient.java/*MainClient.java*/import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent
19、;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import java.io.ObjectOutputStream;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JT
20、extArea;import javax.swing.JTextField;/import tools.Constant;public class MainClient extends JFrame private JScrollPane scrollPane1;private JTextArea ta_show;private JPanel panel1;private JTextField tf_message;private JButton btn_send;private final int SHOW_ROWS = 11;private ObjectOutputStream out;p
21、ublic MainClient() initComponents();private void initComponents() scrollPane1 = new JScrollPane();ta_show = new JTextArea();panel1 = new JPanel();tf_message = new JTextField();btn_send = new JButton();setTitle("Client-客戶端程序");/ 設(shè)置標(biāo)題addWindowListener(new WindowAdapter() public void WindowsC
22、losing(WindowEvent e) thisGraphicClosing(e););Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout();/ 添加scrollPane1ta_show.setRows(SHOW_ROWS);ta_show.setEditable(false);scrollPane1.setViewportView(ta_show);contentPane.add(scrollPane1, BorderLayout.SOUTH);/ 添加panel1panel1.
23、setLayout(new FlowLayout();tf_message.setPreferredSize(new Dimension(320, 25);panel1.add(tf_message);btn_send.setText("Send");btn_send.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) btn_sendActionPerformed(e););panel1.add(btn_send);contentPane.add(panel1,
24、 BorderLayout.NORTH);pack();setLocationRelativeTo(getOwner();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);private void btn_sendActionPerformed(ActionEvent e) try out.writeObject(tf_message.getText();out.flush();show("客戶端>> " +tf_message.getText();tf_message.setText(""); c
25、atch (IOException ie) ie.printStackTrace();private void thisGraphicClosing(WindowEvent e) if (out != null) try out.writeObject(Constant.CONNECT_QUIT);out.flush(); catch (IOException ie) ie.printStackTrace();public void setOut(ObjectOutputStream out) this.out = out;public void show(String mess) ta_sh
26、ow.append(mess + "n");ta_show.setCaretPosition(ta_show.getText().length();4. Client.java/*Client.java*/import java.io.EOFException;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .Socket;import .Socket.*;public class Client private MainC
27、lient frame; private ObjectOutputStream out;private ObjectInputStream in;private Socket socket;public Client() frame = new MainClient();frame.setVisible(true);client_start();public void client_start() try / 請(qǐng)求連接frame.show("連接中,請(qǐng)稍候");socket = new Socket(Constant.HOST_IP, Constant.LISTEN_POR
28、T);/ 連接建立frame.show("連接到服務(wù)器: " + socket.getInetAddress().getHostName();frame.show("-");out = new ObjectOutputStream(socket.getOutputStream();frame.setOut(out);out.flush();/ 保持通信in = new ObjectInputStream(socket.getInputStream();String messagein = ""/String messageout =
29、""while (true) try messagein = (String) in.readObject();/out.writeObject(messageout);if (messagein.equals(Constant.CONNECT_QUIT) frame.setOut(null);break;frame.show("服務(wù)器端>> " + messagein);/frame.show("客戶端>> " + messageout); catch (Exception e) e.printStackTr
30、ace();/ 結(jié)束連接frame.show("對(duì)不起,服務(wù)器已經(jīng)斷開(kāi)!");out.close();in.close();socket.close(); catch (EOFException eofException) System.out.println("服務(wù)器連接終止"); catch (IOException ioException) ioException.printStackTrace();public static void main(String args) new Client();5.Constant.java/*Constant
31、.java*/public class Constant public static final String HOST_IP = "2"/其他以太網(wǎng)地址/public static final String HOST_IP = "33"/上網(wǎng)IP地址/public static final String HOST_IP = ""/mac地址也能連上public static final int LISTEN_PORT = 8000;/監(jiān)聽(tīng)端口號(hào)public stat
32、ic final String CONNECT_QUIT = "quit"/退出連接標(biāo)志課設(shè)二:IP包的解析摘要:網(wǎng)絡(luò)技術(shù)的發(fā)展非常迅速,在企業(yè)、機(jī)關(guān)、學(xué)校的信息管理與服務(wù)領(lǐng)域得到廣泛的應(yīng)用。隨著網(wǎng)絡(luò)體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn)研究的進(jìn)展、操作系統(tǒng)的發(fā)展以及光纖技術(shù)的引入,網(wǎng)絡(luò)通信技術(shù)得到了快速發(fā)展。目前,網(wǎng)絡(luò)分層結(jié)構(gòu)使用最多的就是TCP/IP架構(gòu),作為TCP/IP架構(gòu)的重要支柱IP協(xié)議在網(wǎng)絡(luò)的發(fā)展中起到了至關(guān)重要的作用,IP協(xié)議處于TCP/IP架構(gòu)的網(wǎng)絡(luò)層,其在鏈路層的基礎(chǔ)上,向運(yùn)輸層提供盡最大努力的數(shù)據(jù)傳輸。 關(guān)鍵詞 IP;網(wǎng)絡(luò)層;java ;IP包的解析 一、 引言網(wǎng)絡(luò)技術(shù)的發(fā)
33、展非常迅速,在企業(yè)、機(jī)關(guān)、學(xué)校的信息管理與服務(wù)領(lǐng)域得到廣泛的應(yīng)用。隨著網(wǎng)絡(luò)體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn)研究的進(jìn)展、操作系統(tǒng)的發(fā)展以及光纖技術(shù)的引入,網(wǎng)絡(luò)通信技術(shù)得到了快速發(fā)展。因此,學(xué)習(xí)IP協(xié)議對(duì)深入掌握網(wǎng)絡(luò)知識(shí)是非常重要的。1、課程設(shè)計(jì)目的:本實(shí)驗(yàn)的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,見(jiàn)個(gè)結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時(shí)寫入日志文件。2、課程設(shè)計(jì)要求:(1)抓取通過(guò)本機(jī)的IP數(shù)據(jù)包(2)對(duì)IP數(shù)據(jù)包進(jìn)行解析,將解析后的結(jié)果輸出在標(biāo)準(zhǔn)輸出上(3)將解析后的內(nèi)容寫入日志文件3、設(shè)計(jì)平臺(tái)JVM二、 設(shè)計(jì)原理 為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必須對(duì)網(wǎng)卡進(jìn)行編程,我們使用套接字進(jìn)行編程。1、 使用套接字2、
34、 接收數(shù)據(jù)包3、 定義IP頭部的數(shù)據(jù)結(jié)構(gòu)4、 IP包的解析三、 程序代碼設(shè)計(jì)流程四、 結(jié)果及分析1、運(yùn)行結(jié)果2、分析運(yùn)行本程序首先你得下載JPcap,并配置JPcap的路徑;JPcap運(yùn)行時(shí)依賴WinCap的類庫(kù),所以,也必須在本機(jī)下載安裝WinCap;本程序借助開(kāi)源的JPcap進(jìn)行抓包,然后根據(jù)IP包頭的形式,對(duì)IP包進(jìn)行解析,得到解析后的結(jié)果如上圖。抓包和解析包用的While(ture)是死循環(huán),當(dāng)需要停止時(shí)用Ctrl+c停止即可。五、 源代碼import java.io.*;import jpcap.*;import jpcap.packet.*;import java.util.*;p
35、ublic class ipAnalysis public static void main(String args)throws IOException /*綁定網(wǎng)絡(luò)設(shè)備*/System.out.println("網(wǎng)絡(luò)設(shè)備");NetworkInterface devices=JpcapCaptor.getDeviceList(); /返回一個(gè)網(wǎng)絡(luò)設(shè)備列表for(NetworkInterface n : devices)System.out.println();System.out.println(n.description);System.out.print
36、ln("*");JpcapCaptor jpcap=null;int caplen = 2000;boolean promiscCheck = true;/caplen限制每一次收到一個(gè)數(shù)據(jù)包,只提取該數(shù)據(jù)包中前多少字節(jié)/Promisc:設(shè)置是否混雜模式。處于混雜模式將接收所有數(shù)據(jù)包,若之后又調(diào)用了包過(guò)濾函數(shù)setFilter()將不起任何作用/50這個(gè)參數(shù)主要用于processPacket()方法,指定超時(shí)的時(shí)間try jpcap=JpcapCaptor.openDevice(devices1,caplen,promiscCheck,50); catch (IOExcep
37、tion e) e.printStackTrace();InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);br.readLine();/*抓包并解析*/Date d = new Date();d.getDate();int year = d.getYear();int mouth = d.getMonth();int day = d.getDay();int h = d.getHours();int i = d.getMinutes();int
38、 s = d.getSeconds();String in_text_s ="*"in_text_s += year+"/"+mouth+"/"+"/"+day+" "+h+":"+i+":"+s+"rn"while(true)Packet packet = jpcap.getPacket();if(packet instanceof IPPacket )IP Packet ip=(IPPacket)packet; /將包強(qiáng)制轉(zhuǎn)為IP包
39、System.out.println("版本號(hào):"+ip.version);System.out.println("優(yōu)先權(quán):"+ ip.priority);in_text_s+="優(yōu)先權(quán):" + ip.priority;in_text_s+="rn"System.out.println("區(qū)分服務(wù):最高的可靠性:" + ip.r_flag);in_text_s+="區(qū)分服務(wù):最高的可靠性:" + ip.r_flag;in_text_s+="rn"Syste
40、m.out.println("總長(zhǎng)度:" + ip.length);in_text_s+="區(qū)分服務(wù):最高的可靠性:" + ip.r_flag;in_text_s+="rn"System.out.println("標(biāo)識(shí):" + ip.ident);in_text_s+="區(qū)分服務(wù):最高的可靠性:" + ip.r_flag;in_text_s+="rn"System.out.println("DF:Don't Fragment:" + ip.dont
41、_frag);in_text_s+="DF:Don't Fragment:" + ip.dont_frag;in_text_s+="rn"System.out.println("MF:More Fragment:" + ip.more_frag);in_text_s+="MF:More Fragment:" + ip.more_frag;in_text_s+="rn"System.out.println("片偏移:" + ip.offset);in_text_s+="片偏移:" + ip.offset;in_text_s+="rn"System.out.println("生存時(shí)間:&quo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級(jí)上冊(cè)數(shù)學(xué)教案-第1單元 兩、三位數(shù)乘一位數(shù)第12課時(shí) 練習(xí)三(1)|蘇教版
- 2025年企業(yè)員工體檢協(xié)議先例文本
- 2025安全員B證考試題庫(kù)附答案
- 第一單元(整體教學(xué)設(shè)計(jì))-2024-2025學(xué)年九年級(jí)語(yǔ)文下冊(cè)大單元教學(xué)名師備課系列(統(tǒng)編版)
- 二零二五年度物聯(lián)網(wǎng)渠道框架合作協(xié)議
- 2025年度房屋租賃合同房東責(zé)任保險(xiǎn)附加版
- 2025年度返點(diǎn)合作協(xié)議版:新零售場(chǎng)景下的返利機(jī)制約定
- 2025年度全款購(gòu)車汽車用品贈(zèng)送合同范本
- 2025年貴州城市職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)附答案
- 2025年度煙酒店區(qū)域市場(chǎng)拓展與渠道建設(shè)合作協(xié)議合同
- 《伊利乳業(yè)集團(tuán)企業(yè)內(nèi)部審計(jì)存在的問(wèn)題及優(yōu)化對(duì)策分析案例(論文)10000字》
- 反假貨幣培訓(xùn)考試題庫(kù)-相關(guān)法律法規(guī)及規(guī)范性文件知識(shí)考題
- 鉆井安全操作規(guī)程中英文
- 體育《網(wǎng)球正手擊球》教學(xué)PPT
- 離心機(jī)操作規(guī)程
- 富氫水水素水推廣方法
- 煤礦職業(yè)衛(wèi)生培訓(xùn)課件2023
- 某小學(xué)申報(bào)廣州市義務(wù)教育規(guī)范化學(xué)校自評(píng)分說(shuō)明
- 面神經(jīng)炎課件完整版
- 根據(jù)銅價(jià)計(jì)算各種電纜參考價(jià)格
- 湘教版五年級(jí)下冊(cè)美術(shù)教學(xué)計(jì)劃
評(píng)論
0/150
提交評(píng)論