socket编程:简单的TCP服务器

在服务器能够向客户机连接传输数据之前,必须做以 下四件事情
•创建一个套接字
•将所创建的套接字与本地IPEndPoint绑定
设置套接字为收听模式
•在套接字上接收接人的连接
下面对上述过程的实现。在这里没有任务修饰的内容,仅仅是启动服务器并监听客户机连接所必需的内容,也是
读者实现其他功能时应该遵循的一般原则

第一步是创建 Socket对象的一个实例,其他的三个功能都是在该 Socket对象的基础上实现。
请看下面一小段C#程序:

 static void Main(string[] args)
        {
            IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 9050);
            Socket socketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socketListener.Bind(ipLocal);
            socketListener.Listen(10);
            Socket client = socketListener.Accept();
        }

由Accept()所创建的Socket对象能够用于在服务器和远程客户机之间的任意方向主传送数据

数据。

简单的TCP服务器完整C#小程序(图1:代表客户端telnet 127.0.0.1 9050与服务端的IP和端口一致;图二:表示客户端与服务端建立了连接 图三:客户端发送的数据在服务端接受 图四:客户端关闭时,服务端出现相应提示)


下面是上述结果的C#程序:

 class Program
    {
        static void Main(string[] args)
        {
            int recv;
            byte[] data = new byte[1024];
            IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 19050);
            Socket socketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socketListener.Bind(ipLocal);
            socketListener.Listen(10);
            Console.WriteLine("Waiting for client......");
            Socket socketServer = socketListener.Accept();//阻塞挂起    
            IPEndPoint ipClient = (IPEndPoint)socketServer.RemoteEndPoint;
            Console.WriteLine("Connected with IP:{0} at port:{1}",ipClient.Address,ipClient.Port);
            string welcome = "Welcome to my test server program";
            data = Encoding.Default.GetBytes(welcome);
            socketServer.Send(data, data.Length, SocketFlags.None);////第一次向客户端发送数据
            while (true)
            {
                data = new byte[1024];
                recv = socketServer.Receive(data);//从客户端接受数据
                if (recv == 0)
                    break;
                string serverRecv=Encoding.Default.GetString(data,0,recv);
                Console.WriteLine("服务端收到客户端发送的内容为:{0}",serverRecv);
                //socketServer.Send(data, recv, SocketFlags.None);//向客户端发送数据
            }
            Console.WriteLine("Disconnected from {0}", ipClient.Address);
            socketListener.Close();
            socketServer.Close();
            Console.ReadLine();

        }
    }

 

posted @ 2013-02-21 11:49  乡香田甜  阅读(333)  评论(0编辑  收藏  举报