套接字编程问题 [英] socket programming problem

查看:101
本文介绍了套接字编程问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的套接字正常工作,但一段时间后会使系统变慢

my soket is working properly but it make slow my system after some time

Public Class HANDLESERVER
        Dim CLIENTSOCKET As TcpClient
        Dim CLNO As String
        Public Sub STARTCLIENT(ByVal INCLIENTSOCKET As TcpClient, ByVal CLINENO As String)
            Me.CLIENTSOCKET = INCLIENTSOCKET
            Me.CLNO = CLINENO
            Dim CTTHREAD As Threading.Thread = New Thread(AddressOf RESPONSEREQUEST)
            CTTHREAD.Start()
        End Sub
        Private Sub RESPONSEREQUEST()
            Dim REQUESTCOUNT As Integer
            Dim DATAFROMCLIENT As String
            REQUESTCOUNT = 0
            While (True)
                Try
                    REQUESTCOUNT = REQUESTCOUNT + 1
                    Dim NETWORKSTREAM As NetworkStream = CLIENTSOCKET.GetStream()
                    Dim BYTESFROM(10024) As Byte
                    NETWORKSTREAM.Read(BYTESFROM, 0, CInt(CLIENTSOCKET.ReceiveBufferSize))
                    For I As Integer = 0 To 10024
                        If BYTESFROM(I) = 0 Then
                            NEXTPOS = I
                            Exit For
                        End If
                    Next
                    DATAFROMCLIENT = System.Text.Encoding.ASCII.GetString(BYTESFROM)
                    DATAFROMCLIENT = DATAFROMCLIENT.Substring(0, NEXTPOS)
                    DataFrimAts = DATAFROMCLIENT
                    If DataFrimAts <> "" Then
                        Dim D As New DLG_tRIAL(AddressOf _TIMER_DATA)
                        fmData.rchWithoutParse.Invoke(D)
                    End If
                    Array.Clear(BYTESFROM, 0, 10024)

                    NEXTPOS = 0

                Catch ex As Exception
                End Try
            End While
        End Sub
    End Class


Sub Socket_listner()
        'Public Listnerport As Integer
        Dim serversocket4 As New TcpListener(ATCPORT)
        Dim clientsocket4 As TcpClient

        Dim counter As Integer
        serversocket4.Start()
        counter = 0

        While (True)
            counter += 1
            clientsocket4 = serversocket4.AcceptTcpClient
            Dim client2 As New HANDLESERVER
            client2.STARTCLIENT(clientsocket4, "1")

        End While
        clientsocket4.Close()
        serversocket4.Stop()
    End Sub


如何使其更快,更独立于系统


how to make it more faster and system independent

推荐答案

它们只是使它运行更快的一种简单方法,那就是使用后台工作者.代码本身与应用程序的运行速度或运行速度无关,它是放置代码的地方.我怀疑您有计时器或打电话给全班老师(我不知道,因为我不是读心者).这就是我尝试的方式.

1.首先将2个背景工添加到您的项目中.
2.在第一个后台工作人员中,输入您的第一个代码.
Their is only one easy way that you can make it go faster and that is to use a background worker. The code itself has nothing to do to how fast or how slow your application works, it is where you place the code. I suspect you have a timer or call the class (I don''t know because i am not a mind reader). This is the way I would attempt it.

1. First add 2 background workers to your project.
2. In the first background worker put your first code in.
Public Class HANDLESERVER
        Dim CLIENTSOCKET As TcpClient
        Dim CLNO As String
        Public Sub STARTCLIENT(ByVal INCLIENTSOCKET As TcpClient, ByVal CLINENO As String)
            Me.CLIENTSOCKET = INCLIENTSOCKET
            Me.CLNO = CLINENO
            Dim CTTHREAD As Threading.Thread = New Thread(AddressOf RESPONSEREQUEST)
            CTTHREAD.Start()
        End Sub
        Private Sub RESPONSEREQUEST()
            Dim REQUESTCOUNT As Integer
            Dim DATAFROMCLIENT As String
            REQUESTCOUNT = 0
            While (True)
                Try
                    REQUESTCOUNT = REQUESTCOUNT + 1
                    Dim NETWORKSTREAM As NetworkStream = CLIENTSOCKET.GetStream()
                    Dim BYTESFROM(10024) As Byte
                    NETWORKSTREAM.Read(BYTESFROM, 0, CInt(CLIENTSOCKET.ReceiveBufferSize))
                    For I As Integer = 0 To 10024
                        If BYTESFROM(I) = 0 Then
                            NEXTPOS = I
                            Exit For
                        End If
                    Next
                    DATAFROMCLIENT = System.Text.Encoding.ASCII.GetString(BYTESFROM)
                    DATAFROMCLIENT = DATAFROMCLIENT.Substring(0, NEXTPOS)
                    DataFrimAts = DATAFROMCLIENT
                    If DataFrimAts <> "" Then
                        Dim D As New DLG_tRIAL(AddressOf _TIMER_DATA)
                        fmData.rchWithoutParse.Invoke(D)
                    End If
                    Array.Clear(BYTESFROM, 0, 10024)
 
                    NEXTPOS = 0
 
                Catch ex As Exception
                End Try
            End While
        End Sub
    End Class


3.在第二个后台工作人员中输入第二个代码.


3. In second background worker put your second code in.

Sub Socket_listner()
        'Public Listnerport As Integer
        Dim serversocket4 As New TcpListener(ATCPORT)
        Dim clientsocket4 As TcpClient
 
        Dim counter As Integer
        serversocket4.Start()
        counter = 0
 
        While (True)
            counter += 1
            clientsocket4 = serversocket4.AcceptTcpClient
            Dim client2 As New HANDLESERVER
            client2.STARTCLIENT(clientsocket4, "1")
 
        End While
        clientsocket4.Close()
        serversocket4.Stop()
    End Sub


4.现在,您需要停止检查非法跨线程调用的程序.将此代码放入.


4. Now you need to stop your program from checking for illegalcrossthreadcalls. Put this code in.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.CheckForIllegalCrossThreadCalls = False
    End Sub


5.知道何时要运行代码,您只需运行后台工作程序即可.


5. know when you want to run your code you simply run the background worker.

BackgroundWorker1.RunWorkerAsync()
BackgroundWorker2.RunWorkerAsync()


5.完成

这应该可以解决问题:)希望对您有所帮助.


5. DONE

This should do the trick :) Hope it helps.


这篇关于套接字编程问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆