c# socket 应用(一) UDP


一、socket 使用流程简介

1.1 服务端
1.1.1 申明ip地址端口 –可以指定任意ip 和 未使用的端口
1.1.2 申明socket类型
1.1.3 绑定ip地址至socket上
1.1.4 申明一个任意ip地址和端口
1.1.5 将1.1.4的地址转换为网络地址网络地址包含一个ip地址和一个端口信息
1.1.6 等待接收 1.1.3上的信息,并将接收信息的地址写入至 1.1.5的网络地址上

进入无限循环模式

1.1.7 申明一个空的网络地址
1.1.8 等待接收 1.1.3上的信息 ,并将接收信息的地址放入至 1.1.7网络地址中

将收到的信息回传给 1.1.7的网络地址上


从以上的规划,服务端拥有接收消息又发送消息的功能


1.2 客户端
1.2.1 申明指定的服务器ip地址和端口
1.2.2 申明socket类型
进入无限循环模式
{
1.2.3 读取一个键盘读取字符串
1.2.4 通过socket向1.2.1 地址发送消息
1.2.5 申明一个任意ip地址和端口
1.2.6 将1.2.4转换为网络地址网络地址包含一个ip地址和一个端口信息
1.2.7 等待接口信息,并将接收信息的地址写入至1.2.5的网络地址中

}
关闭服务器连接


二、socket 使用举例说明

服务器端代码:

    #region  UDP 对外服务

            int recv;
            byte[] data = new byte[1024];
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9008);
            Socket newSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);
            newSock.Bind(ipep);


            Console.WriteLine("等待客户端连接...");

            IPEndPoint sende = new IPEndPoint(IPAddress.Any, 0);
            EndPoint remote = (EndPoint)(sende);

            recv = newSock.ReceiveFrom(data, ref remote);

            Console.WriteLine("接收消息:{0}",remote.ToString());
            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

            string wecolme =" weclome service!";
            data = Encoding.ASCII.GetBytes(wecolme);
            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);
            }
            




            #endregion
 

客户端代码:

              byte[] data = new byte[1024];
            string input, stringData;
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9008);
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                ProtocolType.Udp);
            string welcome = "hello---1";
            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];
            int recv = server.ReceiveFrom(data, ref remote);
            Console.WriteLine("开始接收消息{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("stop client");
            server.Close();

 

相关阅读:
Socket简介
socket网络