问题记录

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))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,238评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,430评论 3 415
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,134评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,893评论 1 309
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,653评论 6 408
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,136评论 1 323
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,212评论 3 441
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,372评论 0 288
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,888评论 1 334
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,738评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,939评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,482评论 5 359
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,179评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,588评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,829评论 1 283
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,610评论 3 391
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,916评论 2 372

推荐阅读更多精彩内容