通过TCP发送字符串(VB.NET)

通过TCP发送字符串(VB.NET),vb.net,tcpclient,Vb.net,Tcpclient,我使用TCP客户端成功连接到Onlineic API,但在尝试登录时遇到错误 下面是我的代码(用户名和密码由Onlineic提供) 我在此行收到错误消息:stream.Write(data,0,data.Length) System.NullReferenceException未由用户代码处理 消息=对象引用未设置为对象的实例。 Source=App\u Web\4023pkvf StackTrace: 位于D:\Documents and Settings\sa\My Documents\Vi

我使用TCP客户端成功连接到Onlineic API,但在尝试登录时遇到错误

下面是我的代码(用户名和密码由Onlineic提供)

我在此行收到错误消息:stream.Write(data,0,data.Length)

System.NullReferenceException未由用户代码处理
消息=对象引用未设置为对象的实例。
Source=App\u Web\4023pkvf StackTrace: 位于D:\Documents and Settings\sa\My Documents\Visual Studio中的\u Default.Login() 2010\WebSites\onlineic_vb1\Default.aspx.vb:line 51 在默认按钮2处,单击D:\Documents and Settings\sa\My Documents\Visual Studio中的(对象发送者,事件参数e) 2010\WebSites\onlineic_vb1\Default.aspx.vb:第243行 在System.Web.UI.WebControls.Button.OnClick(EventArgs e)中 位于System.Web.UI.WebControl.Button.RaisePostBackEvent(String eventArgument) 在System.Web.UI.WebControl.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 事件(参数) 位于System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument) 位于System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 在System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)
内部异常:

你应该试试这个:

 Dim HashedPass As String = CreateMd5Hash(testPassword)
        Dim guid__1 As Guid = Guid.NewGuid()
        Dim chksum As String = CreateMd5Hash(testID + HashedPass + guid__1.ToString() + "login")
        Dim sb As New StringBuilder()
        sb.Append("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no""?>")
        sb.Append("<request>")
        sb.Append("<category>client</category>")
        sb.Append("<action>Login</action>")
        sb.Append("<params>")
        sb.Append("<param name=""clid"">" + testID + "</param>")
        sb.Append("</params>")
        sb.Append("<cltrid>" + guid__1.ToString() + "</cltrid>")
        sb.Append("<chksum>" + chksum + "</chksum>")
        sb.Append("</request>")
        Dim responseData As [String] = [String].Empty
        Dim data As [Byte]()
        data = System.Text.Encoding.ASCII.GetBytes(sb.ToString())
        stream.Write(data, 0, data.Length)
        Dim bytes As Int32 = stream.Read(data, 0, data.Length)
        responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
        bytes = stream.Read(data, 0, data.Length)
        responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytes)
        Return responseData.Contains("Command completed successfully")
Dim HashedPass As String=CreateMd5Hash(testPassword)
Dim guid__1作为guid=guid.NewGuid()
Dim chksum As String=CreateMd5Hash(testID+HashedPass+guid\uu 1.ToString()+“login”)
使某人成为新的架线工
某人加上(“”)
某人加上(“”)
某人(“委托人”)
某人附加(“登录”)
某人加上(“”)
sb.追加(“+testID+”)
某人加上(“”)
sb.Append(“+guid\uuu 1.ToString()+”)
sb.追加(“+chksum+”)
某人加上(“”)
Dim responseData为[String]=[String]。空
Dim数据为[字节]()
data=System.Text.Encoding.ASCII.GetBytes(sb.ToString())
stream.Write(数据,0,数据.长度)
Dim字节为Int32=stream.Read(数据,0,数据.长度)
responseData=System.Text.Encoding.ASCII.GetString(数据,0,字节)
字节=stream.Read(数据,0,数据.长度)
responseData+=System.Text.Encoding.ASCII.GetString(数据,0,字节)
返回responseData.Contains(“命令成功完成”)

在哪一行抛出异常?第51行:stream.Write(data,0,data.Length)用于引用API:看起来“stream”在该点为空。在登录()之前是否运行Connect()?是的,我使用Connect()成功连接,然后尝试登录()。我将此代码从其他C代码转换而来。
Line 49:         Dim data As [Byte]()
Line 50:         data = System.Text.Encoding.ASCII.GetBytes(sb.ToString())
Line 51:         stream.Write(data, 0, data.Length)
Line 52:         Dim bytes As Int32 = stream.Read(data, 0, data.Length)
Line 53:         responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
 Dim HashedPass As String = CreateMd5Hash(testPassword)
        Dim guid__1 As Guid = Guid.NewGuid()
        Dim chksum As String = CreateMd5Hash(testID + HashedPass + guid__1.ToString() + "login")
        Dim sb As New StringBuilder()
        sb.Append("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no""?>")
        sb.Append("<request>")
        sb.Append("<category>client</category>")
        sb.Append("<action>Login</action>")
        sb.Append("<params>")
        sb.Append("<param name=""clid"">" + testID + "</param>")
        sb.Append("</params>")
        sb.Append("<cltrid>" + guid__1.ToString() + "</cltrid>")
        sb.Append("<chksum>" + chksum + "</chksum>")
        sb.Append("</request>")
        Dim responseData As [String] = [String].Empty
        Dim data As [Byte]()
        data = System.Text.Encoding.ASCII.GetBytes(sb.ToString())
        stream.Write(data, 0, data.Length)
        Dim bytes As Int32 = stream.Read(data, 0, data.Length)
        responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
        bytes = stream.Read(data, 0, data.Length)
        responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytes)
        Return responseData.Contains("Command completed successfully")