UDP協定。
看代碼:
服務端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDPServer
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[1024];
//建構TCP 伺服器
//得到本機IP,設定TCP端口号
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.125"), 8001);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp);
//綁定網絡位址
newsock.Bind(ipep);
Console.WriteLine("這裡是伺服器, 主機名是 {0}",Dns.GetHostName());
//等待客戶機連接配接
Console.WriteLine("等待用戶端連接配接");
//得到客戶機IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);//會阻塞
Console .WriteLine ("消息來自 {0}: ", Remote.ToString ());
Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
//客戶機連接配接成功後,發送歡迎資訊
string welcome = "歡迎 ! ";
//字元串與位元組數組互相轉換
//data = Encoding .ASCII .GetBytes(welcome);
data = Encoding.UTF8.GetBytes("服務端>>>"+welcome);
//發送資訊
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)
{
data =new byte [1024];
//發送接受資訊
recv =newsock.ReceiveFrom(data ,ref Remote);
Console.Write("用戶端>>>");
Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));
//向用戶端回複資訊
newsock.SendTo(data,recv,SocketFlags.None, Remote);
}
}
}
}
用戶端:
namespace UdpClient
byte[] data = new byte[1024];
string input, stringData;
Console.WriteLine("這裡是用戶端, 主機名是 {0}", Dns.GetHostName());
//設定服務端IP,設定TCP端口号
//定義網絡類型,資料連接配接類型和網絡協定UDP
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "你好! ";
data = Encoding.UTF8.GetBytes("用戶端>>>" + welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);//向服務端發送資料
EndPoint Remote = (EndPoint)sender;
data = new byte[1024];
//對于不存在的IP位址,加入此行代碼後,可以在指定時間内解除阻塞模式限制
//server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100);
int recv = server.ReceiveFrom(data, ref Remote);//将資料接收放入緩沖區
Console.WriteLine("消息來自服務端 {0}: ", Remote.ToString());
input = Console.ReadLine();
//如果輸入exit則退出
if (input == "exit" || input=="quit")
break;
//input = "用戶端>>>" + input;
server.SendTo(Encoding.UTF8.GetBytes(input), Remote);
data = new byte[1024];
recv = server.ReceiveFrom(data, ref Remote);
stringData = Encoding.UTF8.GetString(data, 0, recv);
Console.Write("服務端回複>>>");
Console.WriteLine(stringData);
Console.WriteLine("用戶端關閉.");
server.Close();
研究一個教程,隻做了些改動。
本文轉自 xcf007 51CTO部落格,原文連結:http://blog.51cto.com/xcf007/318765,如需轉載請自行聯系原作者