美文网首页
问题记录

问题记录

作者: 108k | 来源:发表于2021-01-09 13:44 被阅读0次

1、正则表达式一个奇怪的问题

// 一个神奇现象,\x{2}时调用Regex竟然会引起网络异常(BaoServer2-RecvAsync-catch (Exception ex),ex为null),哈哈哈

    public string __Deal(string msg)

    {

      msg = "%34#RDD12345678995B\r";

      string pat = @"%(?<Id>\d+)#RDD(?<Begin>\d{5})(?<End>\d{5})(?<Check>\x{2})";//\\r";

      var m = Regex.Match(msg, pat);

      return "";

    }

原因:未知

解决:不用\x了,以为\x与\d一样,一个表示十六进制,一个表示十进制

补充:

错误原因终于找到了,是因为某些语句抛出异常,而这些语句都是在receive的线程处理过程中,于是引发了异常后的socket被关闭:)

receive语句:

private async void RecvAsync(Socket acceptSocket)

    {

      await Task.Run(new Action(() =>

      {

        int len = 0;

        byte[] buffer = new byte[bufferSize];

        try

        {

          while ((len = acceptSocket.Receive(buffer, bufferSize, SocketFlags.None)) > 0)

          {

            if (recvStrEvent != null)

              recvStrEvent(acceptSocket.RemoteEndPoint.ToString(), Encoding.Default.GetString(buffer, 0, len));

          }

        }

        catch

        {

          CloseClientSocket(acceptSocket);

        }

      }));

    }

结论:看似奇怪的东东必有蹊跷,一切都有因果。

2、mysql大小写敏感的问题

unix系统下对文件的大小写敏感,而windows下对文件的大小写不敏感,因此也影响了mysql的大小写敏感性问题。

1)生成及修改配置文件my.ini

参见 https://blog.csdn.net/weixin_47076063/article/details/110670183

2)在其中增加一句

#设置大小写不敏感

lower_case_table_names=1

完整配置文件如下:

[mysql]

#设置mysql客户端默认字符集

default-character-set=utf8

[mysqld]

#设置3306端口

port =3306

#设置安装目录

basedir=D:\\mysql8021\\bin

#设置数据存放目录

datadir=D:\\mysql8021\\data

#允许最大连接数

max_connections=200

#创建新表时将使用带默认存贮引擎

default-storage-engine=INNODB

#设置大小写不敏感

lower_case_table_names=1

3、一个搞笑的调试问题

设了断点,可是发现是无效的,后来发现根本就不是这个启动项目。哈哈哈,启动的是另一个项目!

还调试个屁。

4、一个socket已经disposed的问题

现象:客户端断开连接之后,再次连接时,服务端没有响应消息过来。

定位:断点跟踪到如下语句:

Socket so = clientSockets.Find(c => c.RemoteEndPoint.ToString() == cip);

 SendAsync(so, message);

第一句竟然走不到第二句,好奇怪,其实应该明白,第一句抛出异常了!

其实是由于c.RemoteEndPoint引起的,访问了已经disposed的东东了,哈哈

'c.RemoteEndPoint' threw an exception of type 'System.ObjectDisposedException'

解决:在前面对socket进行过滤,把已经释放的玩意儿都从列表中删除掉。

for (int i = clientSockets.Count - 1; i >= 0; i--)

      {

        try

        {

          var c = clientSockets[i].RemoteEndPoint;

        }

        catch

        {

          // 'c.RemoteEndPoint' threw an exception of type 'System.ObjectDisposedException'

          // 删除之,for循环从后向前扫过

          clientSockets.RemoveAt(i);

        }

      }

5、socket accept时,不时的有新的连接上来,而逻辑上这些连接不应该有啊

问题:如题,一头雾水,客户端只有开始的一次连接啊

定位:客户端接收语句中,如果有异常,会启动重连!原来如此

原因:由于有个业务处理的地方出现了bug,sql语句抛出了异常,而该异常被接收端的try到了,

于是重连,就是这么的曲折,

于是,连接太多了,导致服务端资源枯竭,不再接收新的连接,于是还以为是服务端的bug呢,调试了一个下午啊。实际上是客户端业务部分的bug啊。

贴客户端接收部分的代码:

private async void RecvAsync()

    {

      await Task.Run(new Action(() =>

      {

        int len = 0;

        byte[] buffer = new byte[bufferSize];

        while ((len = connectSocket.Receive(buffer, bufferSize, SocketFlags.None)) > 0)

        {

          if (recvMessageEvent != null)

            recvMessageEvent(Encoding.UTF8.GetString(buffer, 0, len));

        }

        //try

        //{

        //  while ((len = connectSocket.Receive(buffer, bufferSize, SocketFlags.None)) > 0)

        //  {

        //    if (recvMessageEvent != null)

        //      recvMessageEvent(Encoding.UTF8.GetString(buffer, 0, len));

        //  }

        //}

        //catch (Exception ex)

        //{

        //  Restart();

        //}

      }));

    }

6、socket 关闭的标准代码

connectSocket.Shutdown(SocketShutdown.Both);

        connectSocket.Close();

        connectSocket = null;

这样,资源释放的比较干净了,server端也不会保留残留的连接,不会引起资源泄露。

当然,实际使用时,外面要加上try。

7、两个典型错误

1)abcd.txt文件中有错误,例如少或多逗号等,导致异常后使用了缺省的参数,新设置的端口没有找到,感到有些奇怪。

解决:加打印语句,将错误标识出来,以后加Log写入文件中。

2)使用另一个端口时,消息老是中断,Restart,有点丈二和尚,两个端口有啥区别啊?

原因:两个端口当然没有区别了,但是,业务上,不同的端口对应不同的数据库表啊,有一个端口就是没有建对应的表,导致异常,重启了。

解决:加打印语句,加数据库表了。

8、mysql创建表时,不能使用上引号

使用上引号会报错,

解决:1)使用小的上引号,就像workbench中的那样

2)将上引号全部去掉也无妨,就是说,一个上引号都不用也行,用了反而画蛇添足:)

例句如下:

CREATE TABLE almmsg_3(almmsg_3_id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(almmsg_3_id))

相关文章

  • 记录问题

    iOS11 之后,添加导航栏之后,视图添加在self.view 上面之后,视图的位置是0 0 开始的,结果视图添加...

  • 【问题记录】问题记录专用

    【监听WebView点击事件】日期:2018.06.06 问题描述:使用WebViewClient中的should...

  • 文集序

    用于记录处理过 ubuntu 问题 用于记录处理过 windows 问题 用于记录处理过手机操作系统问题 用于记录...

  • 问题记录

    pip 安装包问题 问题描述:pip install 安装whl文件报错错误信息:UnicodeEncodeErr...

  • 问题记录

    1 使用Keras中自带的MNIST数据集的时候提示不存在 解决办法:直接复制这里提示的下载地址,下载匹配的mni...

  • 问题处理记录

    【Java】java mail Domain contains control or whitespace 异常描...

  • 问题记录

    问题一,打卡刷屏问题 回答人:奶爸 第一互动性强。 第二群反馈。 其他软件,易效能软件更早,但目前不能完成其他信息...

  • 问题记录

    . MKMapView 疑似无法释放 . UITableView 顶部偏移问题 . NSTimer 刷新 UIBu...

  • 问题记录

    useLibrary'org.apache.http.legacy' I libprocessgroup: Kil...

  • 问题记录

    最近和同事们一起在读《童年的王国》这本书,里面有很多内容想不明白,暂时记录下来,也许有一天会得到答案。 “在生命中...

网友评论

      本文标题:问题记录

      本文链接:https://www.haomeiwen.com/subject/hgscaktx.html