socket 通信远程主机强迫关闭了一个现有的连接。

天天见闻 天天见闻 2022-03-07 科技 阅读: 486
摘要: 通信远程主机强迫关闭了一个现有的连接。每隔三秒向局域网内广播一次,当有重服务器上线时,向主服务器注册。“远程主机强迫关闭了一个现有的连接。是不是线程的互斥问题。1)考虑从服务器防火墙的问题2)SendVarData,如果数据量大,会阻塞,考虑新开线程做,并适当的Sleep3)保证client.Connect(ipep);之前可能存在的前一个连接已经关闭。可能造成线程阻塞。

socket 通信远程主机强迫关闭了一个现有的连接。急!!!在线等。

我最近写了一个局域网通信的程序, 用到了多线程和socket来传输文件、发送消息,主服务器的线程中有一个UDP广播, 每隔三秒向局域网内广播一次,当有重服务器上线时远程主机强迫关闭了一个现有的连接,向主服务器注册。 主服务器还可以控制从服务器, 向其发送消息, 但是, 问题出现了, 主服务器发送的消息,有些时候从服务器能收到远程主机强迫关闭了一个现有的连接, 有些时候就抛出异常 “远程主机强迫关闭了一个现有的连接。”这是什么问题,应该怎么解决啊。

UDP代码:

C# code

        public void sendUdp()
        {
            string str = "I'm running";
            UdpClient udp = new UdpClient(2525);
            try
            {
                while (true)
                {
                    IPAddress ipAdd = IPAddress.Parse("255.255.255.255");
                    IPEndPoint end = new IPEndPoint(ipAdd, 2020);
                    
                    try
                    {
                        byte[] sendByte = Encoding.Unicode.GetBytes(str);
                        udp.Send(sendByte, sendByte.Length, end);
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                        Thread.Sleep(3000);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                throw;
            }
        }

TCP代码

C# code

        public void sendTcp(string ipAddress,string str) 
        {
            IPAddress ip = IPAddress.Parse(ipAddress);
            IPEndPoint ipep = new IPEndPoint(ip, 2025);
            //创建套接字   
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //连接到发送端 
            try
            {
                    client.Connect(ipep);
            }
            catch (Exception) 
            {
                MessageBox.Show("指定的从服务器已意外关闭, 链接不上");
            }
            if (client.Connected)
            {
                try
                {
                    this.SendVarData(client, Encoding.Unicode.GetBytes(str));
                }
                catch (Exception)
                {
                    MessageBox.Show("传输文件失败!");
                    throw;
                }
        public static int SendVarData(Socket s, byte[] data)
        {
            int total = 0;
            int size = data.Length;
            int dataleft = size;
            int sent;
            byte[] datasize = new byte[4];
            datasize = BitConverter.GetBytes(size);
            sent = s.Send(datasize);
            while (total < size)
            {
                sent = s.Send(data, total, dataleft, SocketFlags.None);
                total += sent;
                dataleft -= sent;
            }
            return total;
        }

是不是线程的互斥问题。 因为UDP 每隔三秒发送一次, 当我点击按钮进行消息发送TCP的时候由于线程冲突强制停止的, 我应该怎么解决?

------解决方案--------------------

学习...

------解决方案--------------------

1)考虑从服务器防火墙的问题

2)SendVarData,如果数据量大,会阻塞,考虑新开线程做,并适当的Sleep

3)保证client.Connect(ipep);之前可能存在的前一个连接已经关闭

------解决方案--------------------

三秒发一次。。。

如果数据量大。。可能造成线程阻塞。。。

------解决方案--------------------

学习下

------解决方案--------------------

探讨

在广播之前我能不能让UDP线程等待TCP发送完之后在开始呢》 应该怎么办。

------解决方案--------------------

参考远程主机强迫关闭了一个现有的连接

其他相关

电脑配置推荐高性价比 电脑配置推荐

作者: 天天见闻 时间:2024-03-21 阅读: 30
最新的电脑配置推荐配置推荐:CPU:12代酷睿i5- 12400F散热:利民AX120主板:微星B660M-B内存:金士顿 -野兽-3200-16G固态:金士顿nv2 500G M.2一299显卡:影驰 GTX 1660S电源:影驰500W机箱:玩嘉 流光 合计:4300左右CPU:12代酷睿i5 -12400……...

一步查询你能否“携号转网”

作者: 天天见闻 时间:2024-03-06 阅读: 40
具体的携号转网进度安排:那么怎么查询自己的号码是否支持携号转网了呢?然后我让在上海和广东的朋友试了一下,收到的回复是这样的,也就是号码满足携号转网的条件了,可以按提示进行办理携号转网的下一步操作。...

【哥分享】独家揭秘:刷钻刷Q币的黑色产业链

作者: 天天见闻 时间:2024-03-04 阅读: 27
他会发一个网盘给你,让你去看看他都可以教你什么,其中不乏有刷钻刷Q币的技术。刷Q币其实和刷钻原理上是一样的,都是通过不法渠道获得。卡盟就是部分从事刷钻刷Q币刷游戏装备的人集在一起,共同在一个平台出售自己的业务...
通信大数据行程卡是通过什么定位的

通信大数据行程卡是通过什么定位的

作者: 天天见闻 时间:2024-02-28 阅读: 27
通信大数据行程卡是通过什么定位的?在疫情期间,我们需要使用通信大数据行程卡查看自己的行程卡状况,那通信大数据行程卡是怎么知道自己的出行数据呢,通信大数据行程卡是通过什么定位的,下面就和小编一起来看看吧!以上就是通信大数据行程卡是通过什么定位的的全部内容了,希望以上内容对您有所帮助!...
通信大数据行程卡使用指南

通信大数据行程卡使用指南

作者: 天天见闻 时间:2024-02-28 阅读: 29
“通信大数据行程卡”使用介绍通信行程卡查询服务主要面向中国手机用户,能够查询个人国内和国际前14天内的行程,国内精确到省市(停留4小时以上),国外精确到国家。注:新开卡的用户满14天后才能使用行程查询服务以上图源:通信行程卡公众号【方式三】:扫描国务院微信小程防疫行程卡查询...

通信行程卡常见问题解答汇总

作者: 天天见闻 时间:2024-02-28 阅读: 33
问:什么是“通信大数据行程卡”?问:如何使用“通信大数据行程卡”?“通信大数据行程卡”现有官方查询渠道:问:所有人都能使用“通信大数据行程卡”吗?问:“通信大数据行程卡”会显示哪些信息?问:行程卡记录城市信息的判断规则是什么?问:“通信大数据行程卡”为什么能准确证明我的位置呢?...
我来说两句

年度爆文