Foxtable(狐表)用户栏目专家坐堂 → socket连接中断,报错通用数据管理平台停止


  共有3787人关注过本帖树形打印复制链接

主题:socket连接中断,报错通用数据管理平台停止

帅哥哟,离线,有人找我吗?
chenjiu6202
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
socket连接中断,报错通用数据管理平台停止  发帖心情 Post By:2021/8/5 11:02:00 [只看该作者]

socket服务端用于接收多个客户端发送来的气象数据,但是,服务端使用不定期的报错通用数据管理平台停止
造成服务器崩溃,很苦恼,麻烦专家老师给看看

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2021/8/5 11:10:00 [只看该作者]

你自己用的第三方socket工具?

 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 11:10:00 [只看该作者]

麻烦老师给看看

 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 11:11:00 [只看该作者]

不是的

 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 11:11:00 [只看该作者]

怎么上传不上来

 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 11:12:00 [只看该作者]

'''''''本方法是一个socket的服务端
'''''''其调用方法为 sockets = New SocketServer(ip,port)
'''''''传入ip地址和端口号
Public class SocketServer

Shared socket As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
Private Shared result As Byte() = New Byte(72) {}

Public Sub New(ByVal ip As String, ByVal p As Integer)
Dim host As String = ip ''IP地址
Dim port As Integer = p ''端口
Output.Logs("监听日志").Add("ip地址" & host & "--端口" & port)
Output.Logs("监听日志").Save("C:\Listen.txt",True)
socket.Bind(New System.Net.IPEndPoint(System.Net.IPAddress.Parse(host), port))
socket.Listen(90) ''设定最多100个排队连接请求
Dim myThread As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf ListenClientConnect)) ''通过多线程监听客户端连接
myThread.Start()
'Output.Show("已启动监听客户端")
Output.Logs("监听日志").Add("已开启一个线程成功--ip地址" & host & "--端口" & port)
Output.Logs("监听日志").Save("C:\Listen.txt",True)
End Sub
'
'''' <summary>
'''' 监听客户端连接
'''' </summary>
Private Shared Sub ListenClientConnect()
'Output.Show("监听到了客户端")
Output.Logs("监听日志").Add("客户端已经连接")
Output.Logs("监听日志").Save("C:\Listen.txt",True)
While True
    Dim clientSocket As System.Net.Sockets.Socket = socket.Accept()
    'clientSocket.Send(Encoding.UTF8.GetBytes("我是服务器"))
    Dim receiveThread As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf ReceiveMessage))
    receiveThread.Start(clientSocket)
End While
End Sub

'''' <summary>
'''' 接收消息
'''' </summary>
'''' <param name="clientSocket"></param>
Private Shared Sub ReceiveMessage(clientSocket As Object)
Dim myClientSocket As System.Net.Sockets.Socket = CType(clientSocket, System.Net.Sockets.Socket)
Dim msg As String
While True
    Try
        ''通过clientSocket接收数据
        Dim receiveNumber As Integer = myClientSocket.Receive(result)
        If receiveNumber = 0 Then
            Output.Logs("监听日志").Add("接收数据result为空值,不做处理返回")
            Output.Logs("监听日志").Save("C:\Listen.txt",True)
            Return
        End If
        '''将16进制字节流转换为16进制字符串
        msg = BytesTohexString(result)
        Output.Logs("监听日志").Add(Date.Now & "--获取到转换后的字符串--" & msg)
        Output.Logs("监听日志").Save("C:\Listen.txt",True)
        'msg = "接收客户端{0} 的消息:{1}  , " & myClientSocket.RemoteEndPoint.ToString() & "  ,  " & Encoding.Unicode.GetString(result, 0, receiveNumber)
        ''''------------------------转发字符串
        Dim dataInfo As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf SendString))
        dataInfo.Start(msg)
        Output.Logs("监听日志").Add("向120服务器转发字符串")
        Output.Logs("监听日志").Save("C:\Listen.txt",True)
        ''给Client端返回信息
        'Dim sendStr As String = "已成功接到您发送的消息" //向客户端发送信息
        ' Dim bs As Byte() = Encoding.UTF8.GetBytes(sendStr) //向客户端发送信息
        ''Encoding.UTF8.GetBytes()不然中文会乱码
        ''返回信息给客户端
        '’ myClientSocket.Close() '' //发送完数据关闭Socket并释放资源//长连接的话就不关闭
        '' Output.Show("已经到了长连接")
        '' myClientSocket.Send(bs, bs.Length, 0) ///向客户端发送信息
    Catch ex As Exception
        '' Console.WriteLine(ex.Message)
        Output.Logs("监听日志").Add("监听异常--" & ex.Message)
        Output.Logs("监听日志").Save("C:\Listen.txt",True)

        myClientSocket.Close()
        ''关闭Socket并释放资源
        myClientSocket.Shutdown(System.Net.Sockets.SocketShutdown.Both)
        ''禁止发送和上传
        Exit Try
    End Try
End While
End Sub


       '''''-------------------------------启用另外一个线程向另外一个服务器转发消息
    Private Shared Sub SendString(ByVal str As String)
        Dim hc As New HttpClient("http://10.131.50.120/weatherData.htm")
        hc.C
        Dim jo As new JObject
        jo("data") = str
        Dim ret As String
        try
            hc.Content = jo.ToString
            ret = hc.GetData
        catch ex As exception
            'Return ex.message
        End try
    End Sub
End class





''''''-------------------------------------------------------将16进制字节流转换为16进制字符串
Public Function BytesTohexString(bytes As Byte()) As String
If bytes Is Nothing OrElse bytes.Count() < 1 Then
    Return String.Empty
End If

Dim count = bytes.Count()

Dim cache = New StringBuilder()
'cache.Append("0x")
Dim ii As Integer = 0
While ii < count
    Dim tempHex = Convert.ToString(bytes(ii), 16).ToUpper()
    cache.Append(If(tempHex.Length = 1, "0" + tempHex, tempHex))
    System.Threading.Interlocked.Increment(ii)
End While

Return cache.ToString()
End Function

 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 11:15:00 [只看该作者]

我写了个调试日志,怎么上传不上来,莫名其妙的就自动断开了,
有时候几个月都不带断开的,有时候几个小时就断开了,每次断开就报错通用数据管理平台停止 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:listen.txt


 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 11:16:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:blueking.foxdb


 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106404 积分:541167 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/5 14:08:00 [只看该作者]

首先建议把日志功能改为写数据库,因为这个日志功能不是线程安全的。多线程情况下会有文件写冲突。或者把日志功能包装放到一个方法里,使用try处理

其次这里加上日志看有没有反馈

    Private Shared Sub SendString(ByVal str As String)
        Dim hc As New HttpClient("http://10.131.50.120/weatherData.htm")
        hc.C
        Dim jo As new JObject
        jo("data") = str
        Dim ret As String
        try
            hc.Content = jo.ToString
            ret = hc.GetData
        catch ex As exception
        Output.Logs("监听日志").Add("接口调用异常--" & ex.Message)
        Output.Logs("监听日志").Save("C:\Listen.txt",True)
            'Return ex.message
        End try
    End Sub
End class

 回到顶部
帅哥哟,离线,有人找我吗?
chenjiu6202
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:403 积分:3886 威望:0 精华:0 注册:2013/1/18 21:38:00
  发帖心情 Post By:2021/8/5 15:57:00 [只看该作者]

好的,我改改看吧

 回到顶部
总数 22 1 2 3 下一页