日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#基于socket的UDP服务器和客户端实例

發布時間:2023/12/18 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#基于socket的UDP服务器和客户端实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于Udp協議是無連接模式通訊,占用資源少,響應速度快,延時低。至于可靠性,可通過應用層的控制來滿足。(不可靠連接)

使用Udp協議通訊需要具備以下幾個條件:

(1).建立一個套接字(Socket)

(2).綁定服務器端IP地址及端口號--服務器端

(3).通過SendTo()方法向指定主機發送消息 (需提供主機IP地址及端口)

(4).通過ReciveFrom()方法接收指定主機發送的消息 (需提供主機IP地址及端口)

?

下面用代碼實現簡單的服務器---客戶端通信

服務器端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace _023_socket編程_UDP協議_服務器端 {
class Program
{
private static Socket udpServer;
static void Main(string[] args) {
//1,創建socket
udpServer = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//2,綁定ip跟端口號
udpServer.Bind( new IPEndPoint ( IPAddress.Parse("192.168.1.101") ,7788 ) );

//3,接收數據
new Thread(ReceiveMessage){ IsBackground = true}.Start();
Console.WriteLine("服務器啟動...");
Console.ReadKey();
}

static void ReceiveMessage()
{
while (true)
{
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = new byte[1024];
int length = udpServer.ReceiveFrom (data, ref remoteEndPoint);//這個方法會把數據的來源(ip:port)放到第二個參數上
string message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine("從ip:" + (remoteEndPoint as IPEndPoint).Address.ToString() + ":" + (remoteEndPoint as IPEndPoint).Port + "收到了數據:" + message);
}

}
}
}

客戶端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace _002_socket編程_udp協議_客戶端 {
class Program {
static void Main(string[] args) {
//創建socket
Socket udpClient = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

while (true)
{
//發送數據
EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 7788);
string message = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(message);
udpClient.SendTo(data, serverPoint);
}


udpClient.Close();
Console.ReadKey();
}
}
}

執行過程:

(1)啟動服務器

(2)啟動客戶端,并向服務器發送數據

//***************************2*************

C#使用UDP實現服務器與客戶端通信

TCP 必須建立在連接才可以進行通信,
UDP不需要建立通信
但兩者都需要監聽來接收消息

服務端

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Net.Sockets; using System.Net; using System.Threading;namespace UDP_windows_服務器 {public partial class Form1 : Form{public Form1(){InitializeComponent();CheckForIllegalCrossThreadCalls = false;}/// <summary>/// 獲取本地IP/// </summary>private void label1_Click(object sender, EventArgs e){string ip = IPAddress.Any.ToString();textBox1.Text = ip;}Socket server;private void button1_Click(object sender, EventArgs e){//1.創建服務器端電話server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//2.創建手機卡IPAddress iP = IPAddress.Parse(textBox1.Text);IPEndPoint endPoint = new IPEndPoint(iP, int.Parse(textBox2.Text));//3.將電話卡插進電話中(綁定端口號和IP)server.Bind(endPoint);listBox1.Items.Add("服務器已經成功開啟!");//開啟接收消息線程Thread t = new Thread(ReciveMsg);t.IsBackground = true;t.Start();}/// <summary>/// 向特定ip的主機的端口發送數據/// </summary>tevoid SendMsg(){//string hostName = Dns.GetHostName(); //獲取本機名//IPHostEntry localhost = Dns.GetHostEntry(hostName); //獲取IPv6地址//IPAddress localaddr = localhost.AddressList[0];EndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse(textBox2.Text));string msg = textBox3.Text;server.SendTo(Encoding.UTF8.GetBytes(msg), point);}/// <summary>/// 接收發送給本機ip對應端口號的數據/// </summary>void ReciveMsg(){while (true){EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用來保存發送方的ip和端口號byte[] buffer = new byte[1024 * 1024];int length = server.ReceiveFrom(buffer, ref point);//接收數據報string message = Encoding.UTF8.GetString(buffer, 0, length);listBox1.Items.Add(point.ToString() + ":" + message);}}private void button2_Click(object sender, EventArgs e){if (textBox3.Text != ""){//開啟發送消息線程Thread t2 = new Thread(SendMsg);t2.Start();}}} }

客戶端

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading;namespace UDP_windows_客戶端 {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 創建客戶端/// </summary>Socket client;private void button1_Click(object sender, EventArgs e){///創建客戶端client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);IPAddress iP = IPAddress.Parse(textBox1.Text);///端口號IPEndPoint endPoint = new IPEndPoint(iP, int.Parse(textBox2.Text));///建立與服務器的遠程連接client.Connect(endPoint);///線程問題Thread thread = new Thread(ReciveMsg);thread.IsBackground = true;thread.Start(client);listBox1.Items.Add("客戶端已成功開啟!");}/// <summary>/// 向特定ip的主機的端口發送數據/// </summary>void SendMsg(){///獲取IP與端口號EndPoint point = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));///發送內容string msg = textBox3.Text;///將數據發送到指定的ip的主機的端口client.SendTo(Encoding.UTF8.GetBytes(msg), point);}/// <summary>/// 接收發送給本機ip對應端口號的數據/// </summary>void ReciveMsg(object o){Socket client = o as Socket;while (true){try{///用來保存發送方的ip和端口號EndPoint point = new IPEndPoint(IPAddress.Any, 0);///定義客戶端接收到的信息大小byte[] buffer = new byte[1024 * 1024];///接收到的信息大小(所占字節數)int length = client.Receive(buffer);string message = Encoding.UTF8.GetString(buffer, 0, length);listBox1.Items.Add(point.ToString() + ":" + message);}catch (Exception){client.Close();}}}private void button2_Click(object sender, EventArgs e){if (textBox3.Text != ""){//開啟發送消息線程Thread t2 = new Thread(SendMsg);t2.Start();}listBox1.Items.Add(textBox3.Text);}private void Form1_Load(object sender, EventArgs e){}} }

?

總結

以上是生活随笔為你收集整理的c#基于socket的UDP服务器和客户端实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。