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();
    
            }
        }
  • 相关阅读:
    软件测试的14种类型
    解决:Failure to transfer org.apache.maven.plugins:maven-jar-plugin:pom:2.4 from错误
    Docker 自建私有Registry 私有仓库
    VMware vCenter Server 6 Standard
    获取Zabbix 中资源的使用率
    数据库锁表备份及主从复制
    12-kubernetes Dashboard 认证及分级授权
    11-kubernetes RBAC 及授权
    10-kubernetes serveraccount RBAC
    09-kubernetes StatefulSet
  • 原文地址:https://www.cnblogs.com/lqsilly/p/2920314.html
Copyright © 2011-2022 走看看