using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace Socket服务器端
{
class Program
{
static void Main(string[] args)
{
//创建Socket
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//网络、数据流形式、Tcp协议

        //1.绑定IP端口号
        //IPAddress ipaddress = new IPAddress(new byte[] { 192,168,137,1 });
        IPAddress ipaddress = IPAddress.Parse("192.168.137.1");//可以将一个字符串的IP地址转化为IPaddress的对象、同上一行代码
        EndPoint point = new IPEndPoint(ipaddress,7788);//IPEndPoint:IP端口的一层封装类
        //申请方法
        tcpServer.Bind(point);//向系统申请一个可用的ip根端口号,用来做通信
        
        //2.开始监听客户端连接
        //监听方法
        tcpServer.Listen(100);//开始监听等待客户端连接、允许(100)个客户端连接进来。
        Console.WriteLine("开始监听连接");

        //使用返回的Socket做通信

        //3.接收客户端的连接//接收连接方法
        //客户端的Socket对象的引用、用来收发客户端的数据
        Socket clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接进来,之后进行下面的代码。
        Console.WriteLine("一个客户端连接");

        //4.客户端连接后向客户端发送一个消息
        string message = "欢迎接入Socket";//向客户端传输的信息
        byte[] data = Encoding.UTF8.GetBytes(message);//对一个字符串做编码,转为字节数组
        clientSocket.Send(data);
        Console.WriteLine("向客户端发送了一条数据");

        //5.接收客户端的数据
        byte[] datac = new byte[1024];//创建一个字节数组用来接收客户端发过来的数据
        int length = clientSocket.Receive(datac);
        string messagec = Encoding.UTF8.GetString(datac, 0, length);//0~length的字节数据转化为字符串(只把接收到的数据转化为字符串)
        Console.WriteLine("接收到一条从客户端发来的消息"+messagec);


        Console.ReadKey();
    }
}

}