C#學習第22天:網絡編程

網絡編程的核心概念


1. 套接字(Sockets)

  • 定義:套接字是網絡通信的基本單元,提供了在網絡中進行數據交換的端點。
  • 用途:用于TCP/UDP網絡通信,支持低級別的網絡數據傳輸。

2.協議

TCP(Transmission Control Protocol)

  • 面向連接:在傳輸數據之前必須建立連接。
  • 可靠性:提供順序的數據傳輸,具備錯誤校驗和重傳機制,確保數據的完整性。
  • 流控制:提供擁塞控制,防止網絡過載。
  • 適用于需要高可靠性和順序性的數據傳輸場景。

?UDP(User Datagram Protocol)

  • 無連接:不需要建立或關閉連接,數據包獨立傳輸。
  • 不可靠:沒有內置的錯誤校驗和重傳機制,數據可能會丟失、重復或無序。
  • 低延遲:因為無連接且簡單的頭部結構,傳輸速度快。
  • 適用于需要快速傳輸且對丟包不敏感的場景。

基本使用?


使用TCP套接字

TCP服務器:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;public class TcpServer
{public static void Main(){TcpListener server = null;try{Int32 port = 13000;IPAddress localAddr = IPAddress.Parse("127.0.0.1");server = new TcpListener(localAddr, port);server.Start();Console.WriteLine("Server started...");while (true){Console.WriteLine("Waiting for a connection... ");TcpClient client = server.AcceptTcpClient();Console.WriteLine("Connected!");NetworkStream stream = client.GetStream();int i;byte[] bytes = new byte[256];while ((i = stream.Read(bytes, 0, bytes.Length)) != 0){string data = Encoding.ASCII.GetString(bytes, 0, i);Console.WriteLine($"Received: {data}");byte[] msg = Encoding.ASCII.GetBytes(data.ToUpper());stream.Write(msg, 0, msg.Length);Console.WriteLine("Sent: {0}", data.ToUpper());}client.Close();}}catch (SocketException e){Console.WriteLine("SocketException: {0}", e);}finally{server.Stop();}}
}

TCP客戶端:

using System;
using System.Net.Sockets;
using System.Text;public class TcpClientExample
{public static void Main(){try{Int32 port = 13000;TcpClient client = new TcpClient("127.0.0.1", port);NetworkStream stream = client.GetStream();Console.Write("Enter message: ");string message = Console.ReadLine();byte[] data = Encoding.ASCII.GetBytes(message);stream.Write(data, 0, data.Length);Console.WriteLine("Sent: {0}", message);byte[] responseData = new byte[256];int bytes = stream.Read(responseData, 0, responseData.Length);string response = Encoding.ASCII.GetString(responseData, 0, bytes);Console.WriteLine("Received: {0}", response);stream.Close();client.Close();}catch (ArgumentNullException e){Console.WriteLine("ArgumentNullException: {0}", e);}catch (SocketException e){Console.WriteLine("SocketException: {0}", e);}}
}

使用 UDP 套接字

UDP服務器:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;public class UdpServer
{public static void Main(){UdpClient server = new UdpClient(11000);IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);Console.WriteLine("UDP Server is up and waiting for packets...");while (true){byte[] data = server.Receive(ref remoteEP);string message = Encoding.ASCII.GetString(data);Console.WriteLine($"Received: {message} from {remoteEP}");byte[] response = Encoding.ASCII.GetBytes("Echo: " + message);server.Send(response, response.Length, remoteEP);}}
}

UDP客戶端:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;public class UdpClientExample
{public static void Main(){UdpClient client = new UdpClient();client.Connect("127.0.0.1", 11000);Console.Write("Enter message: ");string message = Console.ReadLine();byte[] data = Encoding.ASCII.GetBytes(message);client.Send(data, data.Length);IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);byte[] responseData = client.Receive(ref remoteEP);string response = Encoding.ASCII.GetString(responseData);Console.WriteLine("Received: {0}", response);client.Close();}
}

使用場景


1.實時通訊應用:

  • 如聊天應用、視頻流等,通常使用TCP來確保數據可靠傳輸。

2.游戲開發:

  • 游戲開發中,UDP通常用于快速傳輸實時數據。

3.物聯網和嵌入式設備通信:

  • 在設備之間進行數據交換,可能使用UDP來降低延遲。

希望這些信息能夠幫助你更好地理解 C# 網絡編程的基本知識點!如果有進一步的疑問或具體需求,請隨時提出。

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

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

相關文章

TWASandGWAS中GBS filtering and GWAS(1)

F:\文章代碼\TWASandGWAS\GBS filtering and GWAS README.TXT 請檢查幻燈片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中關于阿姆斯(Ames)ID處理流程的詳細信息。 文件夾“Ames_ID_processing”包含了用于處理阿姆斯ID的文件和R…

圖像處理篇---opencv實現坐姿檢測

文章目錄 前言一、方法概述使用OpenCV和MediaPipe關鍵點檢測角度計算姿態評估 二、完整代碼實現三、代碼說明PostureDetector類find_pose()get_landmarks()cakculate_angle()evaluate_posture() 坐姿評估標準(可進行參數調整):可視化功能&…

.Net HttpClient 使用代理功能

HttpClient 使用代理功能 實際開發中,HttpClient 通過代理訪問目標服務器是常見的需求。 本文將全面介紹如何在 .NET 中配置 HttpClient 使用代理(Proxy)功能,包括基礎使用方式、代碼示例、以及與依賴注入結合的最佳實踐。 注意…

【學習路線】 游戲客戶端開發入門到進階

目錄 游戲客戶端開發入門到進階:系統學習路線與推薦書單一、學習總原則:從底層出發,項目驅動,持續迭代二、推薦學習路線圖(初學者→進階)第一階段:語言基礎與編程思維第二階段:游戲開…

精益數據分析(57/126):創業移情階段的核心要點與實踐方法

精益數據分析(57/126):創業移情階段的核心要點與實踐方法 在創業的浩瀚征程中,每一個階段都承載著獨特的使命與挑戰。今天,我們繼續秉持共同進步的理念,深入研讀《精益數據分析》,聚焦創業的首…

015枚舉之滑動窗口——算法備賽

滑動窗口 最大子數組和 題目描述 給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 原題鏈接 思路分析 見代碼注解 代碼 int maxSubArray(vector<int>& num…

微軟系統 紅帽系統 網絡故障排查:ping、traceroute、netstat

在微軟&#xff08;Windows&#xff09;和紅帽&#xff08;Red Hat Enterprise Linux&#xff0c;RHEL&#xff09;等系統中&#xff0c;網絡故障排查是確保系統正常運行的重要環節。 ping、traceroute&#xff08;在Windows中為tracert&#xff09;和netstat是三個常用的網絡…

解構認知邊界:論萬能方法的本體論批判與方法論重構——基于跨學科視閾的哲學-科學辯證

一、哲學維度的本體論批判 &#xff08;1&#xff09;理性主義的坍縮&#xff1a;從笛卡爾幻想到哥德爾陷阱 笛卡爾在《方法論》中構建的理性主義范式&#xff0c;企圖通過"普遍懷疑-數學演繹"雙重機制確立絕對方法體系。然而哥德爾不完備定理&#xff08;Gdel, 19…

【網絡入侵檢測】基于源碼分析Suricata的IP分片重組

【作者主頁】只道當時是尋常 【專欄介紹】Suricata入侵檢測。專注網絡、主機安全&#xff0c;歡迎關注與評論。 目錄 目錄 1.概要 2. 配置信息 2.1 名詞介紹 2.2 defrag 配置 3. 代碼實現 3.1 配置解析 3.1.1 defrag配置 3.1.2 主機系統策略 3.2 分片重組模塊 3.2.1…

二分查找的邊界問題

前言 二分查找(Binary Search)是一種高效的查找算法&#xff0c;時間復雜度為O(log n)。它適用于已排序的數組或列表。本文將詳細介紹二分查找的兩種常見寫法&#xff1a;閉區間寫法和左閉右開區間寫法。 一、二分查找基本思想 二分查找的核心思想是"分而治之"&am…

重慶醫科大學附屬第二醫院外科樓外擋墻自動化監測

1.項目概述 重慶醫科大學附屬第二醫院&#xff0c;重醫附二院&#xff0c;是集醫療、教學、科研、預防保健為一體的國家三級甲等綜合醫院。前身為始建于1892年的“重慶寬仁醫院”。醫院現有開放床位 1380張&#xff0c;年門診量超過百萬人次&#xff0c;年收治住院病人4.5萬人…

【Redis實戰篇】秒殺優化

1. 秒殺優化-異步秒殺思路 我們來回顧一下下單流程 當用戶發起請求&#xff0c;此時會請求nginx&#xff0c;nginx會訪問到tomcat&#xff0c;而tomcat中的程序&#xff0c;會進行串行操作&#xff0c;分成如下幾個步驟 1、查詢優惠卷 2、判斷秒殺庫存是否足夠 3、查詢訂單…

【idea】調試篇 idea調試技巧合集

前言&#xff1a;之前博主寫過一篇idea技巧合集的文章&#xff0c;由于技巧過于多了&#xff0c;文章很龐大&#xff0c;所以特地將調試相關的技巧單獨成章, 調試和我們日常開發是息息相關的&#xff0c;用好調試可以事半功倍 文章目錄 1. idea調試異步線程2. idea調試stream流…

postman 用法 LTS

postman 用法 LTS File ---- View ---- Show Postman Console

MySQL 數據庫故障排查指南

MySQL 數據庫故障排查指南 本指南旨在幫助您識別和解決常見的 MySQL 數據庫故障。我們將從問題識別開始&#xff0c;逐步深入到具體的故障類型和排查步驟。 1. 問題識別與信息收集 在開始排查之前&#xff0c;首先需要清晰地了解問題的現象和范圍。 故障現象&#xff1a; 數…

用AI寫簡歷是否可行?

讓AI批量寫簡歷然后投簡歷是絕對不行的&#xff01;&#xff01;&#xff01; 為什么不行&#xff0c;按照 "招聘經理" 工作經歷舉例&#xff1a; ai提示詞&#xff1a;請幫我寫一份招聘經理的工作經歷內容&#xff1a; 招聘經理 | XXX科技有限公司 | 2020年…

【從零實現JsonRpc框架#1】Json庫介紹

1.JsonCpp第三方庫 JSONCPP 是一個開源的 C 庫&#xff0c;用于解析和生成 JSON&#xff08;JavaScript Object Notation&#xff09;數據。它提供了簡單易用的接口&#xff0c;支持 JSON 的序列化和反序列化操作&#xff0c;適用于處理配置文件、網絡通信數據等場景。 2.Jso…

Ubuntu——執行echo $USE什么都不顯示

問題&#xff1a;“執行 echo $USER 什么都不顯示”&#xff1f; 一、原因分析 環境變量 $USER 未正確設置 $USER 是系統自動定義的環境變量&#xff0c;通常用于表示當前登錄的用戶名。若該變量未設置或為空&#xff0c;執行 echo $USER 會無輸出。可能場景&#xff1a; 用戶通…

uni-app學習筆記五--vue3插值表達式的使用

vue3快速上手導航&#xff1a;簡介 | Vue.js 模板語法 插值表達式 最基本的數據綁定形式是文本插值&#xff0c;它使用的是“Mustache”語法 (即雙大括號)&#xff1a; <span>Message: {{ msg }}</span> 雙大括號標簽會被替換為相應組件實例中 msg 屬性的值。同…

【PSINS工具箱】基于工具箱的單獨GNSS導航、單獨INS導航、兩者結合組合導航,三種導航的對比程序。附完整的代碼

本文給出基于PSINS工具箱的單獨GNSS導航、單獨INS導航、兩者結合組合導航(153EKF)的程序。并提供三者的軌跡對比、誤差對比。 文章目錄 運行結果MATLAB代碼代碼的簡單介紹簡介2. 平均絕對誤差 (MAE)主要模塊運行結果 三軸軌跡圖: 各軸誤差曲線: 命令行窗口的結果輸出: …