天天看點

C#的Socket程式設計小記

UDP協定。

看代碼:

服務端:

using System;

using System.Collections.Generic;

using System.Linq;

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.Parse("192.168.1.125"), 8001);

                        Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp);

                        //綁定網絡位址

                        newsock.Bind(ipep);

                        Console.WriteLine("這裡是伺服器, 主機名是 {0}",Dns.GetHostName());

                        //等待客戶機連接配接

                        Console.WriteLine("等待用戶端連接配接");

                        //得到客戶機IP

                        IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);

                        EndPoint Remote = (EndPoint)(sender);

                        recv = newsock.ReceiveFrom(data, ref Remote);//會阻塞

                        Console .WriteLine ("消息來自 {0}: ", Remote.ToString ());

                        Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));

                        //客戶機連接配接成功後,發送歡迎資訊

                        string welcome = "歡迎 ! ";

                        //字元串與位元組數組互相轉換

                        //data    = Encoding .ASCII .GetBytes(welcome);

                        data = Encoding.UTF8.GetBytes("服務端>>>"+welcome);

                        //發送資訊

                        newsock.SendTo(data, data.Length, SocketFlags.None, Remote);

                        while (true)

                        {

                                data =new byte [1024];

                                //發送接受資訊

                                recv =newsock.ReceiveFrom(data ,ref Remote);

                                Console.Write("用戶端>>>");

                                Console.WriteLine(Encoding.UTF8.GetString(data, 0, recv));

                                //向用戶端回複資訊

                                newsock.SendTo(data,recv,SocketFlags.None, Remote);

                        }

                }

        }

}

用戶端:

namespace UdpClient

                        byte[] data = new byte[1024];

                        string input, stringData;

                        Console.WriteLine("這裡是用戶端, 主機名是 {0}", Dns.GetHostName());

                        //設定服務端IP,設定TCP端口号

                        //定義網絡類型,資料連接配接類型和網絡協定UDP

                        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

                        string welcome = "你好! ";

                        data = Encoding.UTF8.GetBytes("用戶端>>>" + welcome);

                        server.SendTo(data, data.Length, SocketFlags.None, ipep);//向服務端發送資料

                        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("消息來自服務端 {0}: ", Remote.ToString());

                                input = Console.ReadLine();

                                //如果輸入exit則退出

                                if (input == "exit" || input=="quit")

                                        break;

                                //input = "用戶端>>>" + input;

                                server.SendTo(Encoding.UTF8.GetBytes(input), Remote);

                                data = new byte[1024];

                                recv = server.ReceiveFrom(data, ref Remote);

                                stringData = Encoding.UTF8.GetString(data, 0, recv);

                                Console.Write("服務端回複>>>");

                                Console.WriteLine(stringData);

                        Console.WriteLine("用戶端關閉.");

                        server.Close();

研究一個教程,隻做了些改動。

 本文轉自 xcf007 51CTO部落格,原文連結:http://blog.51cto.com/xcf007/318765,如需轉載請自行聯系原作者