計算機網(wǎng)絡(luò)課程設(shè)計報告及代碼之雙機通信,ip包解析_第1頁
計算機網(wǎng)絡(luò)課程設(shè)計報告及代碼之雙機通信,ip包解析_第2頁
計算機網(wǎng)絡(luò)課程設(shè)計報告及代碼之雙機通信,ip包解析_第3頁
計算機網(wǎng)絡(luò)課程設(shè)計報告及代碼之雙機通信,ip包解析_第4頁
計算機網(wǎng)絡(luò)課程設(shè)計報告及代碼之雙機通信,ip包解析_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、計算機網(wǎng)絡(luò)課程設(shè)計報告設(shè)計名稱: 雙機通信IP數(shù)據(jù)包的解析專 業(yè): 計算機科學(xué)與技術(shù)(交通信息工程)班 級: 201324020311姓 名: 李 俊指導(dǎo)教師: 徐 麗2015 年 12 月 26 日課設(shè)一:雙機通信2摘要:2一、 引言31、課程設(shè)計目的:32、課程設(shè)計要求:3二、 設(shè)計原理3三、 程序代碼設(shè)計流程41、服務(wù)器流程圖42、.客戶端流程圖:4四、 結(jié)果及分析4運行結(jié)果:42、分析:5五、 源代碼51. MainServer.java52. Server.java83. MainClient.java94. Client.java125.Constant.java13課設(shè)二:IP包

2、的解析14摘要:14一、引言141、課程設(shè)計目的:142、課程設(shè)計要求:14二、設(shè)計原理14三、程序代碼設(shè)計流程15四、結(jié)果及分析161、運行結(jié)果162、分析16五、源代碼16課設(shè)一:雙機通信摘要:網(wǎng)絡(luò)技術(shù)的發(fā)展非常迅速,在企業(yè)、機關(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 ;雙機即時通信 1、 引言網(wǎng)絡(luò)技術(shù)的發(fā)展非常迅速,在企業(yè)、機關(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ò)的使用覆蓋全社會的各個角落。因此,學(xué)習(xí)TCP傳輸技術(shù)對深入掌握網(wǎng)絡(luò)知識是非常重要的。1、課程設(shè)計目的:使用套接字socket建立一個簡單的基于TCP的客戶/服務(wù)器形式的網(wǎng)絡(luò)程序了解面向連接的通信原理2、課程設(shè)計要求:(1)服務(wù)器端的搭建(2)客戶端的搭建(3)實現(xiàn)雙機通信3、設(shè)計平臺JVM2、 設(shè)計原理客戶機/服務(wù)器模式在操作過程中采取的是主動

4、請示的方式。(1) 首先服務(wù)器要先啟動,并根據(jù)請示提供相應(yīng)服務(wù),過程如下:a) 打開通信通道并告知本地主機,它愿意在某個公認(rèn)地地址上接受客戶的請求。b) 等待客戶請求到達(dá)該端口。c) 接受到重復(fù)請求服務(wù),處理該請求并發(fā)送應(yīng)答信號。d) 返回第二部等待另一客戶請求。e) 關(guān)閉服務(wù)器(2) 客戶機啟動后,向服務(wù)器發(fā)出請求,過程如下:a) 打開通道信號,并連接到服務(wù)器所在主機的特定端口b) 向服務(wù)器發(fā)送服務(wù)請求,等待并接受應(yīng)答;繼續(xù)提出請求。c) 請求結(jié)束后關(guān)閉通道并終止。3、 程序代碼設(shè)計流程1、服務(wù)器流程圖啟動服務(wù)器等待客戶請求通信 Y N關(guān)閉服務(wù)器2、.客戶端流程圖:啟動客戶機等待服務(wù)器連接通

5、信 Y N關(guān)閉客戶機4、 結(jié)果及分析運行結(jié)果:2、分析:服務(wù)器和一直在等待客戶機的連接,知道有客戶機接入;客戶機一直在請求服務(wù)器,知道服務(wù)器響應(yīng);當(dāng)兩者條件同時滿足,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("等待連接,請稍候");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 / 請求連接frame.show("連接中,請稍候");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("對不起,服務(wù)器已經(jīng)斷開!");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)聽端口號public stat

32、ic final String CONNECT_QUIT = "quit"/退出連接標(biāo)志課設(shè)二:IP包的解析摘要:網(wǎng)絡(luò)技術(shù)的發(fā)展非常迅速,在企業(yè)、機關(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ǔ)上,向運輸層提供盡最大努力的數(shù)據(jù)傳輸。 關(guān)鍵詞 IP;網(wǎng)絡(luò)層;java ;IP包的解析 一、 引言網(wǎng)絡(luò)技術(shù)的發(fā)

33、展非常迅速,在企業(yè)、機關(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é)議對深入掌握網(wǎng)絡(luò)知識是非常重要的。1、課程設(shè)計目的:本實驗的目標(biāo)是捕獲網(wǎng)絡(luò)中的IP數(shù)據(jù)包,解析數(shù)據(jù)包的內(nèi)容,見個結(jié)果顯示在標(biāo)準(zhǔn)輸出上,并同時寫入日志文件。2、課程設(shè)計要求:(1)抓取通過本機的IP數(shù)據(jù)包(2)對IP數(shù)據(jù)包進(jìn)行解析,將解析后的結(jié)果輸出在標(biāo)準(zhǔn)輸出上(3)將解析后的內(nèi)容寫入日志文件3、設(shè)計平臺JVM二、 設(shè)計原理 為了獲取網(wǎng)絡(luò)中的IP數(shù)據(jù)包,必須對網(wǎng)卡進(jìn)行編程,我們使用套接字進(jìn)行編程。1、 使用套接字2、

34、 接收數(shù)據(jù)包3、 定義IP頭部的數(shù)據(jù)結(jié)構(gòu)4、 IP包的解析三、 程序代碼設(shè)計流程四、 結(jié)果及分析1、運行結(jié)果2、分析運行本程序首先你得下載JPcap,并配置JPcap的路徑;JPcap運行時依賴WinCap的類庫,所以,也必須在本機下載安裝WinCap;本程序借助開源的JPcap進(jìn)行抓包,然后根據(jù)IP包頭的形式,對IP包進(jìn)行解析,得到解析后的結(jié)果如上圖。抓包和解析包用的While(ture)是死循環(huán),當(dāng)需要停止時用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(); /返回一個網(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限制每一次收到一個數(shù)據(jù)包,只提取該數(shù)據(jù)包中前多少字節(jié)/Promisc:設(shè)置是否混雜模式。處于混雜模式將接收所有數(shù)據(jù)包,若之后又調(diào)用了包過濾函數(shù)setFilter()將不起任何作用/50這個參數(shù)主要用于processPacket()方法,指定超時的時間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; /將包強制轉(zhuǎn)為IP包

39、System.out.println("版本號:"+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("總長度:" + ip.length);in_text_s+="區(qū)分服務(wù):最高的可靠性:" + ip.r_flag;in_text_s+="rn"System.out.println("標(biāo)識:" + 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("生存時間:&quo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論