• C# 套接字编程:Scoket,我用Scoket做的C# Windows应用程序如下:


    首先请允许我做一个截图:

    以上,是我服务端设计

    我们知道:服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多。因此,我们可以通过程序随机获取一个当前可用的端口

    我将此方法写成了一个类,如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ServerForm.CommonCS
    {
        public class PortHelper
        {
    
            /// <summary>
            /// 这个方法是验证某个端口是否可用
            /// </summary>
            /// <param name="port"></param>
            /// <returns></returns>
            public static bool IsAvaliable(int port)
            {
    
                Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                bool result = false;
                try
                {
                    sk.Bind(new IPEndPoint(IPAddress.Any, port));//尝试绑定,因为如果该端口已经被使用,则无法绑定,会导致异常
                    result = true;
                }
                catch
                {
                    result = false;
                }
                finally
                {
                    sk.Close();
                }
    
                return result;
    
            }
    
            /// <summary>
            /// 这个方法取得一个可用的端口
            /// </summary>
            /// <returns></returns>
            public static int GetAvaliablePort()
            {
                Random rnd = new Random();
                int port = rnd.Next(1024, 65535);//随机产生一个动态的端口号
                while (!IsAvaliable(port))
                {
                    port = rnd.Next(1024, 65535);
                }
    
                return port;
            }
    
        }
    }
    View Code

    当然,这仅仅是获取可用端口的方法,对于套接字编程意义不大。

    那么,根据上图可知,有个按钮叫做:开始监听,也就是说点击这个按钮,服务器将时时监听服务器的某个端口,代码如下:

    今天心情不好,代码就不写了,直接上案例:

     代码下载路径:点击此下载

    也可以通过链接打开:http://files.cnblogs.com/files/chenwolong/Socket.zip

    大致效果图如下:

    @陈卧龙博客

  • 相关阅读:
    vector 指针结果 排序
    C++移位或与操作
    Win7如何显示/隐藏Administrator账号
    一些常用的工具
    发布单机端DELPHI程序访问MySQL必备文件
    DBX error:Driver could not be properly initialized .... 解决办法
    终止当前循环,退出循环,退出当前过程的指令的什么
    Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决
    控件缩写大全
    ClienDataSet 随手笔计(1)
  • 原文地址:https://www.cnblogs.com/chenwolong/p/6611737.html
Copyright © 2020-2023  润新知