初識C#網路程式設計
一、用C#編寫客戶端(Client)
a.
開啟 VS2017 新建一個 C# 的控制檯程式
b.
將解決方案中的 Program.cs 重新命名為 Client.cs
c.
在 Client.cs 中寫入如下內容:
using System;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Client
{
static void Main(string[] args)
{
for(int i = 0; i < 50; i++)
{
Console.WriteLine("木葉飛舞之處,火亦生生不息!!!");
}
// 建立一個UdpClient物件,0表示系統自動分配傳送埠
UdpClient udpSender = new UdpClient(0);
// 連線到服務端並指定接收埠
udpSender.Connect("伺服器公網IP", 5000);
for(int i = 0; i < 50; i++)
{
// 編碼格式為 utf-8
byte[] sendBytes = Encoding.UTF8.GetBytes("木葉飛舞之處,火亦生生不息!!!");
// 把訊息轉換成位元組流傳送到服務端
udpSender.Send(sendBytes, sendBytes.Length);
}
byte[] over = Encoding.UTF8.GetBytes("stop");
udpSender.Send(over, over.Length);
// 按任意鍵退出
Console.ReadKey();
}
}
}
注意將 udpSender.Connect(“伺服器公網IP”, 5000) 中的 伺服器公網IP 換成自己的 IP 地址,如果是本地測試的話,只需換成 localhost 即可
二、配置服務端(Server)
伺服器我選用的是阿里雲的輕量應用伺服器,因為租用的時間還沒有到期,正好可以用來做這次實驗?
伺服器系統選用的是:Ubuntu18.04
a.
首先進入輕量應用伺服器管理控制平臺,然後遠端連線
b.
環境的配置
這裡的服務端選用的是 Python 實現的,原因是配置簡單,還有就是 C# 對 Linux 的支援沒有對 Windows 的那麼好
-
python 版本的檢視(一般預設的是python2的版本)
python --version pip --version python3 --version # 檢視python3的版本
-
安裝 python3-pip
sudo apt-get update sudo apt-get install python3-pip
-
將預設的 python(python2)版本更改為 python3 版本
sudo rm /usr/bin/python # 刪除預設的python連結 sudo ln -s /usr/bin/python3.6 /usr/bin/python # 新建python連結指向python3版本
注意:我的 python3 的版本為 3.6,這裡需換成自己的 python3 版本。
然後再次用 –version 檢視版本資訊,會發現已經更改為 python3 的資訊
然而,用 pip --version 檢視版本資訊時也許會報 ModuleNotFoundError: No module named ‘pip._internal’ 的錯
解決辦法:
sudo vim /usr/local/bin/pip
將 from pip._internal import main 改成 from pip import main
修改後,再次檢視資訊:
-
在 home 目錄下,新建一個 test 文夾,並在該資料夾中新建 Server.py:
cd ~ mkdir test cd test sudo vim Server.py
並寫入如下內容:
from socket import * # 建立套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # ip地址和埠號,ip一般不用寫,表示本機的任何一個ip local_addr = ('', 5000) udp_socket.bind(local_addr) print("等待連線") while True: # 等待接收對方傳送的資料,1024表示能接收的最大位元組數 recv_data = udp_socket.recvfrom(1024) recv_result = recv_data[0].decode('utf-8') if recv_result == 'stop': print("連線已斷開") break print(recv_result) udp_socket.close()
c.
測試
先執行服務端(Server),然後在執行客戶端(Client)
在執行服務端之前需要先開啟 5000 埠,在控制檯中操作如下:
執行服務端:
執行客戶端,並檢視服務端是否接收資料
三、用C#編寫一個簡單的Form視窗程式
a.
建立一個 Windows 窗體應用(.NET Framework) 專案
如果沒有需要重新安裝一下
勾選 .NET 桌面開發 中如下選項:
b.
設計 Form1 窗體如下
c.
修改 Form.cs:
-
引入如下標頭檔案:
using System.Net.Sockets;
-
修改 button1_Click 函式如下:
private void button1_Click(object sender, EventArgs e) { UdpClient udpSender = new UdpClient(0); udpSender.Connect("39.106.160.34", 5000); string message = textBox1.Text; byte[] sendBytes = Encoding.UTF8.GetBytes(message); udpSender.Send(sendBytes, sendBytes.Length); }
d.
測試
四、通過 wireshark抓包,對資料幀進行分析
Ethernet II, Src: 資料鏈路層乙太網幀頭部資訊
Internet Protocol Version 4, Src: 網際網路層IP包頭部資訊
五、參考?:
相關文章
- 初識shell程式設計程式設計
- 初識shell指令碼程式設計指令碼程式設計
- 初識網頁設計語言HTML網頁HTML
- 網路程式設計初學程式設計
- Python GUI介面程式設計-初識PythonGUI程式設計
- 初識工業網際網路
- 初識神經網路----一神經網路
- C# .NET網路程式設計C#程式設計
- c#網路程式設計初探C#程式設計
- 初識策略設計模式設計模式
- python非同步程式設計之asyncio初識Python非同步程式設計
- Unity3D中的C#程式設計初級Unity3DC#程式設計
- 浪曦C#網路程式設計C#程式設計
- C#系統網路程式設計C#程式設計
- C#網路程式設計經典程式碼C#程式設計
- Java 函數語言程式設計(一)初識篇Java函數程式設計
- 網路開發的利器,初識Charles
- 網路通訊程式設計程式設計
- 網路協程程式設計程式設計
- Socket 程式設計 (網路篇)程式設計
- py網路工具程式設計程式設計
- C# 識別url是否是網路路徑C#
- 每個程式設計師應該知道的計算機網路知識程式設計師計算機網路
- c#程式設計C#程式設計
- 計算機初面面試必考的計算機網路知識點梳理面試計算機網路
- C#網路應用程式設計基礎練習題與答案(1)C#程式設計
- 網路程式設計基礎知識程式設計
- 程式設計師職業路線認識程式設計師
- Python網路Socket程式設計Python程式設計
- python 網路篇(網路程式設計)Python程式設計
- 用C#下的Raw Socket程式設計實現網路封包監視 (轉)C#程式設計
- 初識卷積神經網路第一講!卷積神經網路
- 網路程式設計-計算機網路三要素程式設計計算機網路
- C語言程式設計入門之--第一章初識程式C語言程式設計
- [01] C#網路程式設計的最佳實踐C#程式設計
- C# 網路程式設計:.NET 開發者的核心技能C#程式設計
- 初級Java程式設計師提升自己的3條路線Java程式設計師
- [轉載]初級Java程式設計師的學習路線Java程式設計師