- //设置“终结点”
- IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 8001);
- //创建与客户机连接的套接字(基于UDP协议无需侦听Socket)
- Socket ConnSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
- //绑定网络地址
- ConnSocket.Bind(ipe);
- Console.WriteLine("This is a Server, host name is {0}", Dns.GetHostName());
- //等待客户机连接
- Console.WriteLine("Waiting for a client");
- IPEndPoint client = new IPEndPoint(IPAddress.Any, 0);
- //客户机终结点
- EndPoint Remote = (EndPoint)(client);
- byte[] data = new byte[1024];
- //从客户机接收信息,并将信息保存到数据缓冲区data
- int recv = ConnSocket.ReceiveFrom(data, ref Remote);
- //将接收的信息(客户机ip及端口号和文本信息)打印出来
- Console.WriteLine("Message received from {0}: ", Remote.ToString());
- Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
- //客户机连接成功后,发送欢迎信息
- string welcome = "Server Message:Welcome!!!";
- //字符串与字节数组相互转换
- data = Encoding.ASCII.GetBytes(welcome);
- //给客户机发送信息
- ConnSocket.SendTo(data, data.Length, SocketFlags.None, Remote);
- while (true) //时刻准备接收从客户机发回的信息
- {
- data = new byte[1024];
- recv = ConnSocket.ReceiveFrom(data, ref Remote);
- if (Encoding.ASCII.GetString(data, 0, recv) == "exit")
- {
- Console.WriteLine("Client has been exit from the connection.");
- //给客户机发送一条"exit"消息表示欲关闭连接
- welcome = "Server exit!!!";
- data = Encoding.ASCII.GetBytes(welcome);
- ConnSocket.SendTo(data, data.Length, SocketFlags.None, Remote);
- ConnSocket.Close();
- break;
- }
- else
- {
- Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
- //告知客户机当前信息已成功接收
- welcome = "Server has been received successfully!!!";
- data = Encoding.ASCII.GetBytes(welcome);
- ConnSocket.SendTo(data, data.Length, SocketFlags.None, Remote);
- }
- }