C#套接字使用

来源:互联网 发布:北师珠网络教学 编辑:程序博客网 时间:2024/06/05 06:50
服务端
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;namespace Server{    class Program    {        static void Main(string[] args)        {            //establish the local end point for the socket            IPHostEntry ipHost = Dns.Resolve("localhost");            IPAddress ipAddr = ipHost.AddressList[0];            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11);            //create a Tcp/Ip Socket            Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //bind the socket to the local endpoint and listen to the incoming sockets            try            {                sListener.Bind(ipEndPoint);                sListener.Listen(10); //这里的参数定义了backlog,它指定队列中挂起的连接的最大数量。                                       //在上面的代码中,括号中的参数允许队列中有10个连接                //Start listening for connections                while (true)                {                    Console.WriteLine("Waiting for a connection on port{0}", ipEndPoint);                    //program is suspended while waiting  for an incoming connection                    Socket handler = sListener.Accept();                    string data = null;                    //we got the client attempting to connect                    while (true)                    {                        byte[] bytes = new byte[1024];                        int bytesRec = handler.Receive(bytes);                        data += Encoding.ASCII.GetString(bytes, 0, bytesRec);                        if (data.IndexOf("<TheEnd>") > -1)                        {                            break;                        }                    }                    //show the data on the console                    Console.WriteLine("Text Received:{0}", data);                    string theReply = "Thank you for those" + data.Length.ToString() + "characters..";                    byte[] msg = Encoding.ASCII.GetBytes(theReply);                    handler.Send(msg);                    handler.Shutdown(SocketShutdown.Both);                    handler.Close();                }            }            catch (Exception e)            {                Console.WriteLine(e.ToString());            }        }    }}



客户端

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            byte[] bytes = new byte[1024];            //connect to a Remote device            try            {                //Establish the remotee end poingt for the socket                IPHostEntry ipHost = Dns.Resolve("localhost");                IPAddress ipAddr = ipHost.AddressList[0];                IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11);                Console.WriteLine("Waiting for a connection on port{0}", ipEndPoint);                Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                //Connect the socket to the remote endPoint                sender.Connect(ipEndPoint);                Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());                string theMessage = "This is a test";                byte[] msg = Encoding.ASCII.GetBytes(theMessage + "<TheEnd>");                //send the data through the socket                int byteSent = sender.Send(msg);                int bytesRec = sender.Receive(bytes);                Console.WriteLine("The Server says:{0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));                //Release the socket                sender.Shutdown(SocketShutdown.Both);                sender.Close();            }            catch (Exception e)            {                Console.WriteLine("Exception:{0}", e.ToString());            }        }    }}

流程图


0 0
原创粉丝点击