套接字编程问题 [英] socket programming problem
本文介绍了套接字编程问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的套接字正常工作,但一段时间后会使系统变慢
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屋!
查看全文