一、服务器端
using System
using System.Collections.Generic
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.Any , 8001)
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp)
//绑定网络地址
newsock.Bind(ipep)
Console.WriteLine("This is a Server, host name is {0}",Dns.GetHostName())
//等待客户机连接
Console.WriteLine("Waiting for a client")
//得到客户机IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0)
EndPoint Remote = (EndPoint)(sender)
recv = newsock.ReceiveFrom(data, ref Remote)
Console .WriteLine ("Message received from {0}: ", Remote.ToString ())
Console .WriteLine (Encoding .ASCII .GetString (data ,0,recv ))
//客户机连接成功后,发送欢迎信息
string welcome = "Welcome ! "
//字符串与字节数组相互转换
data = Encoding .ASCII .GetBytes (welcome )
//发送信息
newsock .SendTo (data ,data.Length ,SocketFlags .None ,Remote )
while (true )
{
data =new byte [1024]
//发送接受信息
recv =newsock.ReceiveFrom(data ,ref Remote)
Console .WriteLine (Encoding .ASCII .GetString (data ,0,recv))
newsock .SendTo (data ,recv ,SocketFlags .None ,Remote )
}
}
}
}
二、客户端
using System
using System.Collections.Generic
using System.Linq
using System.Text
using System.Net
using System.Net.Sockets
namespace UDPClient
{
class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024]
string input ,stringData
//构建TCP 服务器
Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName())
//设置服务IP,设置TCP端口号
IPEndPoint ipep = new IPEndPoint(IPAddress .Parse ("127.0.0.1") , 8001)
//定义网络类型,数据连接类型和网络协议UDP
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
string welcome = "Hello! "
data = Encoding.ASCII.GetBytes(welcome)
server.SendTo(data, data.Length, SocketFlags.None, ipep)
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0)
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("Message received from {0}: ", Remote.ToString())
Console.WriteLine(Encoding .ASCII .GetString (data,0,recv))
while (true)
{
input = Console .ReadLine ()
if (input =="exit")
break
server .SendTo (Encoding .ASCII .GetBytes (input ),Remote )
data = new byte [1024]
recv = server.ReceiveFrom(data, ref Remote)
stringData = Encoding.ASCII.GetString(data, 0, recv)
Console.WriteLine(stringData)
}
Console .WriteLine ("Stopping Client.")
server .Close ()
}
}
}