TCP协议通过Socket(套接字)建服务器和客户端
服务器端:
static void Main(string[] args)
{
//创建Socket,这里用的是TCP协议,所以SocketType为Stream(流)
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定IP跟端口号
IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
IPEndPoint point = new IPEndPoint(ip, 7899);
tcpServer.Bind(point);//向操作系统申请一个可用的IP根端口号用来做通信
//开始监听
tcpServer.Listen(100);
//接收消息
Socket clientSocket = tcpServer.Accept();//暂停线程知道有一个客户端链接过来
//使用返回的socket跟客户端做通信
string message = "Hello 欢迎你!";
byte[] data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);
//死循环用来一直接受客户端的消息
while (true)
{
byte[] backData = new byte[1024];
int length = clientSocket.Receive(backData);
string backMessage = Encoding.UTF8.GetString(backData, 0, length);
Console.WriteLine(backMessage);
}
Console.ReadKey();
}
客户端:
static void Main(string[] args)
{
//创建socket
Socket tcpClient=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//发起建立连接的请求
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint point = new IPEndPoint(ip,7899);
tcpClient.Connect(point);
//接受消息
byte[] data = new byte[1024];
string message;
int length= tcpClient.Receive(data);
message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine(message);
while (true)
{
string backMessage = Console.ReadLine();
byte[] backData = Encoding.UTF8.GetBytes(backMessage);
tcpClient.Send(backData);
}
Console.ReadKey();
}
UDP协议通过Socket(套接字)建服务器和客户端
服务器端:
static void Main(string[] args)
{
//创建socket
Socket udpServer = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
//绑定IP跟端口号
udpServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),7899 ));
//接收数据
byte[] data = new byte[1024];
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any,0);
int length=udpServer.ReceiveFrom(data,ref remoteEndPoint);//这个方法会把收据的来源(IP,端口号)放到第二个参数上
string message = Encoding.UTF8.GetString(data,0,length);
Console.WriteLine("from ip"+(remoteEndPoint as IPEndPoint).Address.ToString()+"port"+(remoteEndPoint as IPEndPoint).Port.ToString()+"receive messages:"+message);
udpServer.Close();
Console.ReadKey();
}
}
客户端:
static void Main(string[] args)
{
Socket udpClient = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
string message = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(message);
udpClient.SendTo(data,new IPEndPoint(IPAddress.Parse("127.0.0.1"),7899));
Console.ReadKey();
}
TCPListener和TCPClient
服务器端:
static void Main(string[] args)
{
//TCPListener对Socket进行了一层封装,会自动创建Socket对象
TcpListener tcpServer=new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"),7899));
//开始监听
tcpServer.Start();
//等待客户端连接
TcpClient client= tcpServer.AcceptTcpClient();
//开始通信
byte[] data = new byte[1024];
NetworkStream stream= client.GetStream();//从这个网络流可以读取客户端发送过来的数据
int length=stream.Read(data,0,1024);//读取数据
string message = Encoding.UTF8.GetString(data,0,length);
Console.WriteLine(message);
stream.Close();
client.Close();
tcpServer.Stop();
Console.ReadKey();
}
客户端:
static void Main(string[] args)
{
//建立对象的时候就会建立连接
TcpClient client = new TcpClient(“127.0.0.1”,7899);
NetworkStream stream= client.GetStream();
byte[] data = Encoding.UTF8.GetBytes(Console.ReadLine());
stream.Write(data,0,data.Length);
stream.Close();
client.Close();
Console.ReadKey();
}
UDPClient
服务器端:
static void Main(string[] args)
{
UdpClient udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"),7899 ));
IPEndPoint point=new IPEndPoint(IPAddress.Any, 0);
byte []data=udpClient.Receive(ref point);
string message = Encoding.UTF8.GetString(data, 0, data.Length);
Console.WriteLine(message);
udpClient.Close();
Console.ReadKey();
}
客户端:
static void Main(string[] args)
{
UdpClient udpClient = new UdpClient();
string message = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(message);
udpClient.Send(data,data.Length,new IPEndPoint(IPAddress.Parse("127.0.0.1"),7899 ));
udpClient.Close();
Console.ReadKey();
}