C#最基本的Socket編程

来源:https://www.cnblogs.com/lucode/archive/2020/01/05/socket.html
-Advertisement-
Play Games

示常式序是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條信息,伺服器向客戶端返回一條信息,是一個簡單示例,也是一個最基本的socket編程流程。 簡單步驟說明: 1.用指定的port, ip 建立一個EndPoint對象 2.建立一個Socket對象; 3.用Socket對象的Bind()方法 ...


示常式序是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條信息,伺服器向客戶端返回一條信息,是一個簡單示例,也是一個最基本的socket編程流程。

簡單步驟說明:

1.用指定的port, ip 建立一個EndPoint對象

2.建立一個Socket對象;

3.用Socket對象的Bind()方法綁定EndPoint

4.用Socket對象的Listen()方法開始監聽

5.接收到客戶端的連接,用socket對象的Access()方法創建新的socket對象用於和請求的客戶端進行通信

6.通信結束後記得關閉socket

代碼:

 1  int port = 2000;
 2             string host = "127.0.0.1";
 3             // create endPoint 
 4             IPAddress ip = IPAddress.Parse(host);
 5             IPEndPoint ipe = new IPEndPoint(ip, port);
 6             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 7             s.Bind(ipe);
 8 
 9             s.Listen(0);
10 
11             Console.WriteLine("wait a client to connect..");
12             Socket temp = s.Accept();
13             Console.WriteLine("create a connection");
14 
15             //receive message
16             string recvStr = "";
17             byte[] recvBytes= new byte[1024];
18             int bytes;
19             bytes = temp.Receive(recvBytes, recvBytes.Length, 0);
20             recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
21             Console.WriteLine("server have get message:{0}",recvStr );
22 
23             // send message
24             string sendStr = "ok! client send message cuccessful";
25             byte[] bs = Encoding.ASCII.GetBytes(sendStr);
26             temp.Send(bs, bs.Length, 0);
27 
28             //end
29             temp.Close();
30             s.Close();
31         
32             Console.WriteLine("end socket com!");
33             Console.ReadLine();

 

 

 

 客戶端:

1.用指定的port, ip 建立一個EndPoint對象

2.建立一個socket對象

3.用socket對象的Connect()方法以上面的EndPoint對象作為參數,向伺服器發送連接請求;

4.如果連接成功,就用socket對象的Send()方法向伺服器發送信息

5.用socket對象的Receive()方法接收伺服器發來的信息

6.通信結束記得關閉socket:

代碼::

//init server port and ip
                int port = 2000;
                string host = "127.0.0.1";
                IPAddress ip = IPAddress.Parse(host);

                // create ipendpoint
                IPEndPoint ipe = new IPEndPoint(ip, port);

                // create client sockets
                Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Console.WriteLine("Connecting...");
                
                // connect to server
                c.Connect(ipe);
                
                // send to server
                string sendStr = "Hello, this is a socket test";
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);
                Console.WriteLine("Send Message");
                c.Send(bs, bs.Length, 0);

                // receive a message from server
                string recvStr = "";
                byte[] recvBytes = new byte[1024];
                int bytes;
                bytes = c.Receive(recvBytes, recvBytes.Length, 0);

                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                Console.WriteLine("Client get message:{0}", recvStr);

                //close Client
                c.Close();

            }
            catch (ArgumentException e)
            {

                Console.WriteLine("argumentNullException:{0}",e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("socketException:{0}",e);
            }
            Console.WriteLine("Press enter to exit");
            Console.ReadLine();

來源:內容來自網路


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SqlSessionFactory SqlSessionFactory是單個資料庫映射關係經過編譯後的記憶體鏡像,主要作用是創建SqlSession。 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml ...
  • 我們經常會從網路上下載一些帶密碼的壓縮包,想要獲取裡面的內容,往往就要給提供商支付一些費用。想要白嫖其中的內容,常見的做法是百度搜索一些壓縮包密碼破解軟體,但後果相信體驗過的人都知道。本文將會利用 Python 破解壓縮包的密碼,這裡以 ZIP/RAR 為例。 ! 破解原理 其實原理很簡單,一句話概 ...
  • 為什麼Python使用縮進來分組語句? 為什麼簡單的算術運算得到奇怪的結果? 為什麼浮點計算不准確? 為什麼Python字元串是不可變的? 為什麼必須在方法定義和調用中顯式使用“self”? 為什麼不能在表達式中賦值? 為什麼Python對某些功能(例如list.index())使用方法來實現,而其 ...
  • 一、前言 只是講asp.net core 3.x通用主機的大致原理,這些東西是通過查看源碼以及自己根據經驗總結得來的,在文章中不會深入源碼,因為個人覺得懂原理就曉得擴展點,後期碰到有需求的時候再仔細去研究源碼也不遲。閱讀前你應該先去瞭解下(推薦博客園老A的博客): asp.net core中的依賴註 ...
  • 建造者模式(Builder)——從組裝電腦開始 建造者模式概括起來就是將不同獨立的組件按照一定的條件組合起來構成一個相對業務完整的對象。調用者無需知道構造的過程。 我們從組裝電腦開始 讓我們從買組裝電腦開始吧。 首先要買一個電腦,一般都有兩個選擇 —— 品牌電腦和組裝電腦,一般人為了省事和放心都會選 ...
  • 首先說說它的機制 處理HTTP請求並生成響應是一個很長的過程。路由只是這個過程的第一步。路由過程的最終結果是一個控制器。它將處理沒有映射到物理靜態文件的請求。 如下圖 操作調用程式,是核心,主要負責協調所有必要的步驟來處理請求,操作調用程式接受控制器工廠和控制器上下文,後者是一個容器對象,包含了路由 ...
  • 什麼樣的HTTP方法是安全的? 什麼樣的HTTP方法是安全的? 如果一個方法不會改變資源的表述,那麼這個方法就被認為是安全的。 如果一個方法不會改變資源的表述,那麼這個方法就被認為是安全的。 例如 HTTP GET 和 HTTP HEAD 就被認為是安全的,但需要註意的是,這並不意味著執行GET請求 ...
  • 向Web API傳遞參數 數據可以通過多種方式來傳給API。 數據可以通過多種方式來傳給API。 Binding Source Attributes 會告訴 Model 的綁定引擎從哪裡找到綁定源。 Binding Source Attributes 會告訴 Model 的綁定引擎從哪裡找到綁定源。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...