2024-2-29-網絡編程作業

1>TCP

源代碼:

服務器端:

#include <myhead.h>
#define SER_IP "10.168.1.111"
#define SER_PORT 8888
#define MAXSIZE 128
int main(int argc, char const *argv[])
{int sfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);bind(sfd, (struct sockaddr *)&sin, sizeof(sin));listen(sfd, 128);struct sockaddr_in cin;socklen_t socklen = sizeof(cin);int newfd = accept(sfd, (struct sockaddr *)&cin, &socklen);printf("客戶端IP:%s, 端口號為:%d\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));char rbuf[MAXSIZE] = "";while (1){bzero(rbuf, sizeof(rbuf));int res = recv(newfd, rbuf, sizeof(rbuf),0);if (res == 0){printf("客戶端已經關閉\n");break;}printf("從IP為%s 端口為%d 接收到數據為:%s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), rbuf);strcat(rbuf, "O.o");send(newfd, rbuf, strlen(rbuf),MSG_DONTWAIT);}close(newfd);close(sfd);return 0;
}

客戶端:

#include <myhead.h>
#define SER_IP "10.168.1.111"
#define SER_PORT 8888
#define MAXSIZE 128
int main(int argc, char const *argv[])
{int cfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);connect(cfd, (struct sockaddr *)&sin, sizeof(sin));char wbuf[MAXSIZE] = "";while (1){bzero(wbuf, sizeof(wbuf));printf("請輸入>>>\n");fgets(wbuf, sizeof(wbuf), stdin);wbuf[strlen(wbuf) - 1] = 0;send(cfd, wbuf, strlen(wbuf), 0);printf("send success\n");if (strcmp(wbuf, "quit") == 0){break;}bzero(wbuf, sizeof(wbuf));recv(cfd, wbuf, sizeof(wbuf), 0);printf("收到消息為:%s\n", wbuf);}close(cfd);return 0;
}

效果圖

2>UDP

源代碼:

服務器端

#include <myhead.h>
#define SER_IP "10.168.1.111"
#define SER_PORT 8888
#define MAXSIZE 128
int main(int argc, char const *argv[])
{int sfd = socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);bind(sfd, (struct sockaddr *)&sin, sizeof(sin));char rbuf[MAXSIZE] = "";struct sockaddr_in cin;socklen_t socklen = sizeof(cin);while (1){bzero(rbuf, sizeof(rbuf));recvfrom(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr *)&cin, &socklen);printf("接受到的消息為:%s\n", rbuf);strcat(rbuf, "o.O");sendto(sfd, rbuf, strlen(rbuf), 0, (struct sockaddr *)&cin,socklen);printf("發送成功\n");}close(sfd);return 0;
}

客戶端:

#include <myhead.h>
#define SER_IP "10.168.1.111"
#define SER_PORT 8888
#define MAXSIZE 128
int main(int argc, char const *argv[])
{int cfd = socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);char wbuf[MAXSIZE] = "";while (1){bzero(wbuf, sizeof(wbuf));printf("請輸入>>>:");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1] = 0;sendto(cfd, wbuf, sizeof(wbuf), 0, (struct sockaddr *)&sin, sizeof(sin));printf("發送成功\n");bzero(wbuf,sizeof(wbuf));recvfrom(cfd, wbuf, sizeof(wbuf), 0, NULL,NULL);printf("接受到的消息為:%s\n", wbuf);}close(cfd);return 0;
}

效果圖:

3>思維導圖

4>面試題整理

1.標準IO的實現

通過操作句柄FILE*類型的指針,使用fopen、fclose、fgets等函數來操作文件。在操作過程中,有一個緩沖區,先將要輸入或輸出的數據,放入緩沖區后,等到緩沖區刷新時機到了后,統一調用內核提供的函數,將數據刷入內核空間,經由內核空間做后續操作。

2.什么是進程?

進程是程序的一次執行過程,是資源分配的基本單位,每個進程會被分配4Gd的虛擬內存,調度機制為:時間片輪詢、上下文切換,有一定的生命周期:創建態-->就緒態-->阻塞態-->運行態-->終止態

3.如何將程序執行直接運行于后臺?

a.out 后加 &

4.共享內存通信原理

是多個進程之間的通信,共享內存是將獨立于多個進程之外的物理內存,分別映射到不同的進程中,其中一個進程對其進行修改,另一個進程也跟著修改;共享內存中的數據的讀寫不是一次性的,寫入共享內存中的數據,被讀取后,依然存在,直到下一次寫入的數據將其覆蓋;共享內存的操作時,由于共享內存段,相對于多個進程屬于臨界資源,所以對該資源的使用,需要使用同步機制

5.TCP/IP四層網絡通信結構?

網絡接口層-->網際層-->運輸層-->應用層

6.TCP服務器通信流程

創建套接字-->綁定服務器地址信息結構體-->設置被動監聽-->阻塞等待客戶端的連接-->數據收發-->關閉套接字

7.路由器位于哪一層?

網際層

8.交換機在哪一層?

網絡接口層

9.static的用法

作用:static靜態變量

1.static修飾的變量內存在靜態區

2.static修飾全局變量:static修飾為初始化的全局變量默認結果為0

3.static修飾局部變量:

延長生命周期(內存的申請到釋放),延長至整個文件,類似全局,不是作用域。

static修飾未初始化的局部變量,默認結果為0

4.static修飾函數:static修飾函數,生命周期在本文件有效,不可以跨文件調用

5.static修飾指針:

不可以使用staic修的指針指向auto類型的變量地址。

因為計算機先為static類型變量分配內存,后分配auto類型的變量,不允許使用已存在的變量,指向未知的變量地址。

10.const的用法

修飾的變量不可變。修飾普通變量時,相當于常量,且需要初始化;修飾函數參數時,不管是什么數據類型,也不管是 指針傳遞,還是 引用傳遞,只要加了 const 修飾,就可以防止函數內意外修改該參數,起到保護作用;用 const 修飾返回的指針或引用,保護指針或引用的內容不被修改。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711053.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄算法訓練營|day47

第九章 動態規劃 198.打家劫舍213.打家劫舍II337.打家劫舍III代碼隨想錄文章詳解 198.打家劫舍 dp[i]表示偷第i家及之前所能獲取的最大金額 偷第i家&#xff1a;dp[i] dp[i-2]nums[i]&#xff0c;不偷第i家&#xff1a;dp[i] dp[i-1] func rob(nums []int) int {if len(num…

RDD簡介與基礎編程

1. 什么是RDD&#xff1f; RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做彈性分布式數據集&#xff0c;是Spark中最基本的數據處理模型。在代碼中&#xff0c;RDD是一個抽象類&#xff0c;他代表著一個彈性的、不可變的、可分區的、里面的元素可并行計算的集…

android TextView 實現富文本顯示

android TextView 實現富文本顯示&#xff0c;實現抖音直播間公屏消息案例 使用&#xff1a; val tvContent: TextView helper.getView(R.id.tvContent)//自己根據UI業務要求&#xff0c;可以控制 圖標顯示 大小val levelLabel MyImgLabel( bitmap 自己業務上的bitmap )va…

第零章_計算機導論

0.1 計算機&#xff1a;輔助人腦的好工具 所謂的計算機就是一種計算器&#xff0c;而計算器其實是:『接受用戶輸入指令與數據&#xff0c;經由中央處理器的數學與邏輯單元運算處理后&#xff0c;以產生或儲存成有用的信息』。因此&#xff0c;只要有輸入設備(不管是鍵盤還是觸摸…

UE5基于RumtimeFBXImport插件使用C++加載服務器上fbx文件方法

UE5的RumtimeFBXImport插件其實只能加載本機的fbx文件&#xff0c;要加載服務器上的fbx文件的話&#xff0c;需要先將該fbx文件下載到本地&#xff0c;然后再使用RumtimeFBXImport插件加載。 示例文件如下&#xff1a; #include "Loader/WebLoader.h" #include &quo…

HTML5:七天學會基礎動畫網頁4

backgorund-size 值與說明 length(單位像素):設置背景圖片高度和寬度&#xff0c;第一個值設置寬度&#xff0c;第二個值設置高度&#xff0c;如果只給出一個值&#xff0c;第二個是設置為auto。 percentage(百分比):以父元素的百分比來設置背景圖像的寬度和高度&#xff0c…

CSS技巧:實現兩個div在同一行顯示的方法

css如何讓兩個div在同一行顯示 - web開發 - 億速云 在Web開發中&#xff0c;經常遇到需要將多個元素水平排列在同一行的情況。其中一個常見的需求是將兩個div元素放置在同一行上&#xff0c;使它們并排顯示。在本文中&#xff0c;我們將介紹幾種實現這一效果的CSS方法。 1. 使…

TypeScript基礎知識:類型推導和上下文類型化

在 TypeScript 中&#xff0c;類型推導和上下文類型化是兩個重要的概念。它們使得代碼編寫更加簡潔、可讀性更高&#xff0c;并且幫助我們避免冗余的類型注解。本文將深入探討這兩個概念&#xff0c;并通過示例代碼演示它們的用法和好處。 一、類型推導 類型推導是 TypeScript…

day06_菜單管理(查詢菜單,添加菜單,添加子菜單,修改菜單,刪除菜單,角色分配菜單,查詢菜單,保存菜單,動態菜單)

文章目錄 1 菜單管理1.1 表結構介紹1.2 查詢菜單1.2.1 需求說明1.2.2 頁面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端對接sysMenu.jssysMenu.vue 1.3 添加菜單1.3.1 需求說明1.3.3 頁面制作1.3.3 后端接口…

【git隨筆,日常積累】

Git常用基礎 branch 查看所有分支&#xff1a; git branch -a切換到分支&#xff1a;git checkout develop創建分支并切換到&#xff1a;git checkout -b develop創建一個新分支&#xff1a;git checkout --orphan new_branch --orphan 選項用于創建一個沒有歷史記錄的分支 刪…

騰訊云安裝MYSQL遠程連接不上解決方案

推薦安裝步驟博客&#xff0c;寫的很詳細&#xff0c;如果不會安裝的話&#xff0c;可以根據安裝步驟一直走。 Windows10下超詳細Mysql安裝_win10安裝mysql-CSDN博客 修改 my.cnf或者my.ini 找到里面bind-address將bind-address 127.0.0.1設置成bind-address 0.0.0.0&#x…

AI英語學習助手-幫助建立詞庫和句子-極簡安裝(python基于Django和 OpenAI GPT API的網站程序)

AI英語學習助手-幫助建立詞庫和句子-極簡安裝&#xff08;python基于Django和 OpenAI GPT API的網站程序&#xff09; 學了很久的英語&#xff0c;但是發現還是被單詞困住了&#xff0c;天天查句子查單詞太麻煩&#xff0c;現在有了Chat GPT&#xff0c;能夠很好得幫助學習英語…

CSP-202109-2-非零段劃分

CSP-202109-2-非零段劃分 【70分思路-暴力枚舉】 這段代碼的目的是在給定一個由自然數&#xff08;非負整數&#xff09;組成的數組后&#xff0c;通過選擇一個適當的正整數 p&#xff0c;將數組中所有小于 p 的數變為 0&#xff0c;從而使得數組中非零段的數量達到最大。這里…

使用 gma 繪制隋唐洛陽城

背景 最近河南文旅大伙&#xff0c;給家鄉帶了一波熱度&#xff0c;想想又是王子又是公主&#xff0c;著實羨慕。出門在外&#xff0c;還是對加很有感覺得&#xff0c;不過很遺憾&#xff0c;本人不能為家鄉做出貢獻&#xff0c;只能使用這種小伎倆&#xff0c;稍稍展示&#…

【網絡編程】理解客戶端和服務器并使用Java提供的api實現回顯服務器

目錄 一、網絡編程 二、客戶端和服務器 三、客戶端和服務器的交互模式 四、TCP 和 UDP UDP socket api 的使用 1、DatagramSoket 2、DatagramPacket TCP socket api 的使用 1、ServerSocket 2、Socket 一、網絡編程 本質上就是學習傳輸層給應用層提供的 api&#x…

Leetcode 128. 最長連續序列

最長連續序列 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1&#xff1a; 輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&am…

ARM簡介

ARM&#xff1a;ARM是Advanced RISC Machine的縮寫&#xff0c;意為高級精簡指令集計算機。 英國ARM公司&#xff0c;2016年被軟銀創始人孫正義斥資320億美元收購了。現在是軟銀旗下的芯片設計公司&#xff0c;總部位于英國劍橋&#xff0c;專注于設計芯片&#xff0c;賣芯片生…

揭秘:頭部房企如何借助數據分析實現穩健發展?

房地產行業是我國國民經濟中的重要支柱產業之一&#xff0c;在房地產市場供求關系發生重大變化的當下&#xff0c;房企面臨多重挑戰。Kyligence 服務的這家頭部房企把發展的重點聚焦于內生&#xff0c;關注內生的轉化率、接管的效率以及內生毛利率的提升&#xff0c;引入 Kylig…

基于springboot實現保險信息網站系統項目【項目源碼+論文說明】計算機畢業設計

基于springboot實現保險信息網站系統演示 摘要 隨著互聯網的不斷發展&#xff0c;現在人們獲取最新資訊的主要途徑來源于網上新聞&#xff0c;當下的網上信息宣傳門戶網站的發展十分的迅速。而保險產品&#xff0c;作為當下人們非常關注的一款能夠給人們帶來醫療、生活、養老或…

面試筆記系列七之多線程+分布式系統基礎知識點整理及常見面試題

目錄 多線程 介紹一下線程的生命周期及狀態&#xff1f; 線程的sleep、wait、join、yield如何使用&#xff1f; sleep與yield方法的區別在于&#xff0c; 進程調度算法 創建線程有哪些方式&#xff1f; 什么是守護線程&#xff1f; ThreadLocal的原理是什么&#xff0c;…