版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、四四 川川 理理 工工 學學 院院課 程 設 計 書學院 計算機學院 專業(yè) 計算機科學與技術 班級 09 級計科八班 題目 發(fā)送 TCP 數據包 教師 王非 何紹榮 陳超 學生 張衛(wèi) 郭文娟 楊曉麗 四川理工學院計算機網絡課程設計II姓名姓名學號學號分工分工張衛(wèi)張衛(wèi)09101010814文檔編寫、排版、流程圖、文檔編寫、排版、流程圖、代碼編寫代碼編寫郭文娟郭文娟09101010819文檔編寫、排版、查找資料文檔編寫、排版、查找資料楊曉麗楊曉麗09101010828文檔編寫、排版、查找資料文檔編寫、排版、查找資料 四川理工學院計算機網絡課程設計III目目 錄錄摘要摘要.10引言引言.11設計課題
2、設計課題.211 課程設計課題.212 課程設計要求.22系統(tǒng)概述系統(tǒng)概述.321 設計程序目的.322 程序設計思想 .323 程序運行操作平臺.33概要設計概要設計.431 相關知識.432程序流程圖:.64詳細設計詳細設計.941 定義各頭部數據結構.942 計算校驗和子程序.1043 填充數據包.1144 發(fā)送數據包.1345 執(zhí)行程序.155.擴展設計(擴展設計(C#實現)實現).165.1 概述 .165.2 服務器端 .175.3 客服端.1954 執(zhí)行程序.216. 設計中遇到的問題設計中遇到的問題.217設計后的感想及收獲設計后的感想及收獲.2171 設計后對計算機網絡課程的
3、認識.2172 對此次課程設計的收獲 .22參考文獻參考文獻.22四川理工學院計算機網絡課程設計1發(fā)送 TCP 數據包摘要在這個課程設計中,主要對 TCP 數據包的結構以及 TCP 協(xié)議與 IP 協(xié)議的關系進行了說明。用 C 語言編程,設計一個發(fā)送 TCP 數據包的程序,并在發(fā)送成功后顯示一句“Send Ok” 。在設計的過程中,需要對 IP 首部、TCP 首部和偽首部定義數據結構,并且填充 IP 數據包和 TCP 數據包。在填充數據包的過程中,需要調用計算校驗和的函數,分別用于校驗 IP 頭和 TCP 頭部(加上偽頭部) 。在發(fā)送數據包的過程中,要填充發(fā)送緩沖區(qū)并填入數據報的目的地址。這樣整
4、個發(fā)送過程就結束了。擴展:用 C#設計一個服務器程序(Server) ,一個客戶端程序(Client) ,客戶端通過服務器的轉發(fā)向其他客服端發(fā)送數據,實現任意客服端的相互通信。0引言計算機網絡課程是一門很重要的專業(yè)課,它主要是對各個層的協(xié)議做了詳細的介紹,學習這門課程我們就必須掌握各個層的協(xié)議的工作原理。OSI模型有 7 個不同的層,分為兩個組。上面三層定義了中斷系統(tǒng)中的應用程序將被彼此通信,以及如何與用戶通信。下面 4 層定義了三怎樣進行端到端的數據傳輸。FOSI 參考模型的 7 層和各層的功能 1. Application layer (應用層)文件、打印、消息、數據庫和應用四川理工學院計
5、算機網絡課程設計2程序 uvQ7 2. Presentation layer(表示層) 數據加密、壓縮和轉換服務?C6 3. Session layer (會話層)會話控制 vH 4. Transport layer(傳輸層) 端到端連接 lz6k 5. Network layer (網絡層)路由選擇 01) cksum+=*buffer+; size -=sizeof(USHORT); if(size) cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum & 0 xffff); cksum += (cksum 16); retu
6、rn (USHORT)(cksum); 43 填充數據包 在填充數據包的過程中,我們不僅要填充 TCP 頭部,還要填充 IP 頭部。同時,為了填充校驗和,我們還要對 TCP 偽頭部進行填充。/填充 IP 首部 ipHeader.h_verlen=(IPVER4 | sizeof(ipHeader)/sizeof(unsigned long); ipHeader.tos=(UCHAR)0; ipHeader.total_len=htons(unsigned short)sizeof(ipHeader)+sizeof(tcpHeader)+sizeof(tcp_send_data); ipHead
7、er.ident=0; /16 位標識四川理工學院計算機網絡課程設計12 ipHeader.frag_and_flags=0; /3 位標志位 ipHeader.ttl=128; /8 位生存時間 ipHto=IPPROTO_UDP; /協(xié)議類型 ipHeader.checksum=0; /檢驗和暫時為 0 ipHeader.sourceIP=inet_addr(argv1); /32 位源 IP 地址 ipHeader.destIP=inet_addr(argv3); /32 位目的 IP 地址 /計算 IP 頭部檢驗和 memset(check_Buff,0,MAX_BU
8、FF_LEN); memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER); ipHeader.checksum=checksum(check_Buff,sizeof(IP_HEADER);/構造 TCP 偽首部 psdHeader.saddr=ipHeader.sourceIP; psdHeader.daddr=ipHeader.destIP; psdHeader.mbz=0; psdHeader.ptcl=ipHto; psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_
9、data);/填充 TCP 首部 tcpHeader.th_dport=htons(atoi(argv4); /16 位目的端口號 tcpHeader.th_sport=htons(atoi(argv2); /16 位源端口號 tcpHeader.th_seq=0; /SYN 序列號 tcpHeader.th_ack=0; /ACK 序列號置為 0/TCP 長度和保留位 tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)4|0); 四川理工學院計算機網絡課程設計13 tcpHeader.th_flag=2; /修改這里來實現
10、不同的標志位探測,2 是 SYN,1是/FIN,16 是 ACK 探測 等等 tcpHeader.th_win=htons(unsigned short)16384); /窗口大小 tcpHeader.th_urp=0; /偏移大小 tcpHeader.th_sum=0; /檢驗和暫時填為 0 /計算 TCP 校驗和 memset(check_Buff,0,MAX_BUFF_LEN); memcpy(check_Buff,&psdHeader,sizeof(psdHeader); memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,si
11、zeof(tcpHeader); memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data); tcpHeader.th_sum=checksum(check_Buff,sizeof(PSD_HEADER)+sizeof(TCP_HEADER)+sizeof(tcp_send_data);44 發(fā)送數據包 填充完 TCP 包后,最后的工作就是把數據包發(fā)送出去。 /填充發(fā)送緩沖區(qū) memset(Sendto_Buff,0,MAX_BUFF_LEN); memcpy(Send
12、to_Buff,&ipHeader,sizeof(IP_HEADER); memcpy(Sendto_Buff+sizeof(IP_HEADER),&tcpHeader,sizeof(TCP_HEADER); memcpy(Sendto_Buff+sizeof(IP_HEADER)+sizeof(TCP_HEADER),tcp_send_data,sizeof(tcp_send_data);四川理工學院計算機網絡課程設計14 int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+sizeof(tcp_send_data); /發(fā)送數
13、據報的目的地址 SOCKADDR_IN dest; memset(&dest,0,sizeof(dest); dest.sin_family=AF_INET; dest.sin_addr.s_addr=inet_addr(argv3); dest.sin_port=htons(atoi(argv4);rect=sendto(sock,Sendto_Buff,datasize, 0,(struct sockaddr*)&dest, sizeof(dest); /發(fā)送成功printf(send ok!n);45 執(zhí)行程序程序截圖:四川理工學院計算機網絡課程設計155.擴展設計(C#
14、實現)5.1 概述為了能更好的體現使用 TCP 如何進行通信。我們又用 C#建立了一個客服端,一個服務端,客服端能夠通過發(fā)送 TCP 數據包連接到服務器,并再通過服務器的轉發(fā)將消息傳遞的指定的客服端。這樣就建立了一個(TCP)面向連接的聊天程序。5.2 服務器端建立監(jiān)聽套接字 ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPHostEntry ihe = Dns.GetHostByName(Dns.GetHostName(); /獲取主機IP IPEndP
15、oint ipe = new IPEndPoint(ihe.AddressList0, Convert.ToInt32(TxtServerPort.Text.Trim(); ListenSocket.Bind(ipe); ListenSocket.Listen(1000); 創(chuàng)建監(jiān)聽線程 ListenThread = new Thread(ListenAccept); ListenThread.IsBackground = true; ListenThread.Start(); 監(jiān)聽線程,用于不停的監(jiān)聽是否有客服端的連接 private void ListenAccept() while(tr
16、ue) LinkClientSocket = ListenSocket.Accept(); if(LinkClientSocket != null) /創(chuàng)建接收數據線程 Thread RecvThread = new Thread(RecvData); RecvThread.IsBackground = true; RecvThread.Start(LinkClientSocket);四川理工學院計算機網絡課程設計16 接收數據線程,用于處理接收到的數據 private void RecvData(object data) Socket RecvSocket = (Socket)data; /
17、定義網絡流讀取對象 NetworkStream ns = new NetworkStream(LinkClientSocket); StreamWriter sw = new StreamWriter(ns); StreamReader sr = new StreamReader(ns); while(ServerFlag) /分離命令 if (!Connected) break; CommandSplit = sr.ReadLine().Split(|); switch(CommandSplit0) case CONNECT: /調用連接函數 Connect(RecvSocket); bre
18、ak; case LIST: /調用列表函數 List(RecvSocket); break; case CHAT: /調用群聊函數 Chat(); break; case SEND:四川理工學院計算機網絡課程設計17 /調用私聊函數 Send(); break; case EXIT: /調用退出函數 Exit(); ServerFlag = false; break; if (!Connected) ServerFlag = false; Thread.Sleep(200); RecvSocket.Close(); 5.3 客服端建立連接服務器端的套接字ClientSocket = new
19、Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(TxtServerIP.Text.Trim(), Convert.ToInt32(TxtServerPort.Text.Trim(); ClientSocket.Connect(ipe); /連接客服端 ns = new NetworkStream(ClientSocket); sw = new StreamWriter(ns); sr = new Str
20、eamReader(ns); sw.WriteLine(CONNECT| + TxtUserName.Text.Trim() + | + TxtPwd.Text.Trim(); sw.Flush();創(chuàng)建接收數據線程,用于處理從服務器端發(fā)送來的信息四川理工學院計算機網絡課程設計18 RecvDataThread = new Thread(RecvData); RecvDataThread.IsBackground = true; RecvDataThread.Start();private void RecvData() while (ClientFlag) CommandSplit = sr
21、.ReadLine().Split(|);/分離接收到的數據 switch(CommandSplit0) case OK: MessageBox.Show(登錄成功); DeleteUser UpdateJoin = new DeleteUser(UpdateJoinUser); Invoke(UpdateJoin, TxtUserName.Text.Trim(); break; case ERROR: MessageBox.Show(CommandSplit1); break; case CHAT: AppendDataToRich AddData = new AppendDataToRic
22、h(Chat); Invoke(AddData, n + CommandSplit1 + :n + CommandSplit2); break; case LIST: UpdateListBox UpdateData = new UpdateListBox(UpdateUser); Invoke(UpdateData); break; case JOIN: DeleteUser UpdateJoinData = new DeleteUser(UpdateJoinUser); Invoke(UpdateJoinData, CommandSplit1); break; case SEND: AppendDataToRich AddSendData = new AppendDataToRich(Chat);四川理工學院計算機網絡課程設計19 Invoke(AddSendData, n + CommandSplit1 + :n + CommandSplit3); break; case QUIT: DeleteUser DelUser = new DeleteUser(Quit); Invoke(DelUser, CommandSplit1); break; if (!Connected) ClientFlag = false; Thread.S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年考古發(fā)掘項目土方清理與保護合同3篇
- 2025版信息安全保密協(xié)議合同5篇
- 二零二五年房地產項目配套基礎設施建設合同3篇
- 二零二五年度智能交通管理系統(tǒng)免責協(xié)議范本4篇
- 2025版鋁材回收利用項目合作協(xié)議4篇
- 2025年度殘疾人勞動合同簽訂中的殘疾人權益保障與就業(yè)促進2篇
- 2025餐飲企業(yè)員工勞動合同15篇
- 2025年度商業(yè)廣場墻面LED廣告屏租賃合同標的協(xié)議4篇
- 2024食用油倉儲物流服務合作合同3篇
- 標識標牌施工質量保障合同(2025年度)3篇
- 2025年浙江省湖州市湖州職業(yè)技術學院招聘5人歷年高頻重點提升(共500題)附帶答案詳解
- ZK24600型平旋盤使用說明書(環(huán)球)
- 城市基礎設施維修計劃
- 2024山西廣播電視臺招聘專業(yè)技術崗位編制人員20人歷年高頻500題難、易錯點模擬試題附帶答案詳解
- 新材料行業(yè)系列深度報告一:新材料行業(yè)研究框架
- 人教版小學英語各冊單詞表(帶英標)
- 廣東省潮州市潮安區(qū)2023-2024學年六年級上學期期末考試數學試題
- 鄉(xiāng)村治理中正式制度與非正式制度的關系解析
- 智能護理:人工智能助力的醫(yī)療創(chuàng)新
- 國家中小學智慧教育平臺培訓專題講座
- 5G+教育5G技術在智慧校園教育專網系統(tǒng)的應用
評論
0/150
提交評論