2013-04-18 52 views
-2

我做了一个小程序,允许用户远程控制他们的家中的电脑,显然有互联网连接,但我不断收到这个错误,只要我尝试发送测试命令到我的笔记本电脑...通过网络发送数据时出错?

System.ArgumentNullException:值不能为空。

参数名:缓冲

在System.Net.Sockets.NetworkStream.Read(字节[]缓冲液,的Int32偏移的Int32大小)

在svchost.Form1.accept_Client()在C:\用户\塞缪尔\文件\的Visual Studio \ 2012 \项目\ svchost的\ svchost的\ Form1.vb的:线40

这里是我的代码...

Imports STE 

Public Class Form1 'PS, client_info is a rich text box... 

Private serverListener As New Net.Sockets.TcpListener(9653) 'list for incoming connections 
Private serverSender As New Net.Sockets.TcpClient 'send data back to client 
Private byteFromClient() As Byte 'Allows max of 1024 characters from client. 
Private byteFromServer() As Byte 'Allows max of 1024 characters from server. 
Private stringFromServer As String = "" 
Private stringFromClient As String = "" 
Private streamFromServer As Net.Sockets.NetworkStream 
Private streamFromClient As Net.Sockets.NetworkStream 
Private pendingClient As New Net.Sockets.TcpClient 'client to handle 
Private secure As New STE.Encryption 'encrypt data 

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 
    Recive.CancelAsync() 
End Sub 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Recive.RunWorkerAsync() 'Start listening thread 
End Sub 

Private Sub Recive_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles Recive.DoWork 
    serverListener.Start() 'start listening to incoming information from clients 
    Do While True 
     If serverListener.Pending = True Then 
      Call accept_Client() 
     End If 
     If Recive.CancellationPending = True Then 
      Exit Do 
     End If 
    Loop 
End Sub 

Private Sub accept_Client() 
    Try 
     pendingClient = serverListener.AcceptTcpClient 
     pendingClient.GetStream.Read(byteFromClient, 0, pendingClient.ReceiveBufferSize) 'Error here... 
     stringFromClient = System.Text.Encoding.ASCII.GetString(byteFromClient) 
     client_info.Text = stringFromClient & vbNewLine 
    Catch ex As Exception 
     client_info.Text = ex.ToString 
    End Try 
End Sub 

Private Sub Transmit_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles Transmit.DoWork 
    Try 
     Do While serverSender.Connected = False 
      serverSender.Connect("127.0.0.1", 9653) 'connect to local pc (temp)... 
     Loop 
     byteFromServer = System.Text.Encoding.ASCII.GetBytes(commandTB.Text) 
     streamFromServer.Write(byteFromServer, 0, byteFromServer.Length) 'write data to stream 
     streamFromServer.Flush() 'send data 
    Catch ex As Exception 
     MsgBox(ex.ToString & vbNewLine & ex.InnerException.Data.ToString) 
    End Try 
End Sub 

Private Sub send_command_Click(sender As Object, e As EventArgs) Handles send_command.Click 
    Transmit.RunWorkerAsync() 'start thread to transmit data to client 
End Sub 
End Class 

网络编程目前对我来说是一个薄弱环节,所以我甚至不确定我的代码是否具有正确的逻辑。任何帮助是极大的赞赏。

回答

1
Dim byteFromClient(1024) As Byte 
+0

谢谢,这是摆脱了错误,但现在没有任何反应,我没有收到传入的数据。 – Sam

+0

数据在您的数组中,但它没有充满数据。要找出写入数据的数量,请检查“Read”函数的返回值。您应该读取循环内的数据,直到您读取所有数据。 1K(1024)可能不足以达到您的目的。如果您正在通过相同的缓冲区读取,请小心设置'offset',以避免覆盖之前的读取数据。 – Xaqron

+0

好吧,我会用这样的东西吗?暗淡我为整数= 0 做,当I Sam