zoukankan      html  css  js  c++  java
  • 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();
    
            }
        }
  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/lqsilly/p/2920314.html
Copyright © 2011-2022 走看看