Vb.net 如何在服务器端获取数组列表

Vb.net 如何在服务器端获取数组列表,vb.net,Vb.net,我已经创建了客户端和服务器应用程序 我正在尝试将Arraylist从cilent发送到服务器 Arraylist是从客户端传输的,但是如何在服务器中使用该数组列表来获取Arraylist的信息 当我在服务器端打印消息时,它会显示System.collection.ArrayList 下面是我的代码 客户端代码 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Clic

我已经创建了客户端和服务器应用程序

我正在尝试将
Arraylist
从cilent发送到服务器
Arraylist
是从客户端传输的,但是如何在服务器中使用该数组列表来获取
Arraylist的信息

当我在服务器端打印消息时,它会显示System.collection.ArrayList

下面是我的代码

客户端代码

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Try
        Client = New TcpClient("192.168.0.226", 8080)
        Dim Writer As New StreamWriter(Client.GetStream())

        detailList.Add(txtname.Text)
        detailList.Add(txtadd.Text)

        For Each i As String In detailList
            Console.WriteLine(i)
        Next

        Writer.Write(detailList)
        ' Writer.Write("</> " & txtaddress.Text & " <\>")

        MsgBox("datas send ")
        Writer.Flush()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
Private子按钮1\u单击(发送方作为System.Object,e作为System.EventArgs)处理按钮1。单击
尝试
客户机=新的TcpClient(“192.168.0.226”,8080)
Dim Writer作为新的StreamWriter(Client.GetStream())
detailList.Add(txtname.Text)
detailList.Add(txtadd.Text)
对于detailList中的每个i As字符串
控制台写入线(i)
下一个
Writer.Write(详细列表)
'Writer.Write(“&txtaddress.Text&”)
MsgBox(“数据发送”)
Writer.Flush()
特例
MsgBox(例如消息)
结束尝试
端接头
服务器代码

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim message As String
    Dim nStart As Integer
    Dim nLast As Integer

    If listener.Pending = True Then
        message = ""
        cline = listener.AcceptTcpClient()
        Dim reder As New StreamReader(cline.GetStream)
        While reder.Peek > -1
            message &= Convert.ToChar(reder.Read()).ToString
        End While

        If message.Contains("</>") Then
            nStart = InStr(message, "</>") + 10
            nLast = InStr(message, "<\>")
            message = Mid(message, nStart, nLast)
        End If

        Console.WriteLine(message)

        txtname.Text = message
        Label1.Text = message
        '   saveData()
    End If
End Sub

Public Sub saveData()

    Dim cmd As SqlCommand
    sc.Open()
    cmd = New SqlCommand("insert into demo values('" + txtname.Text + "')", sc)
    cmd.ExecuteNonQuery()
    msg = MsgBox("data save")

    sc.Close()

End Sub
Private Sub Timer1\u Tick(发送方作为System.Object,e作为System.EventArgs)处理Timer1.Tick
将消息设置为字符串
Dim nStart作为整数
Dim nLast作为整数
如果listener.Pending=True,则
message=“”
cline=listener.AcceptCpcClient()
Dim reder作为新的StreamReader(cline.GetStream)
而reder.Peek>-1
message&=Convert.ToChar(reder.Read()).ToString
结束时
如果message.Contains(“”),则
nStart=InStr(信息“”)+10
nLast=InStr(信息“”)
message=Mid(message、nStart、nLast)
如果结束
Console.WriteLine(消息)
txtname.Text=消息
Label1.Text=消息
'保存数据()
如果结束
端接头
公共子存储数据()
Dim cmd作为SqlCommand
sc.公开赛()
cmd=New-SqlCommand(“插入到演示值(“”+txtname.Text+“)”),sc)
cmd.ExecuteNonQuery()
msg=MsgBox(“数据保存”)
sc.关闭()
端接头

在这一行的
按钮中单击:

Writer.Write(detailList)
您使用的是重载版本的
Write
,它接受一个
对象
。为了写出对
对象有意义的内容
,.NET在内部调用了
detailList
ToString()
方法。这里的
ToString()
方法返回字符串“System.Collection.ArrayList”

因此,您不会向服务器发送实际的
ArrayList
实现,而只是发送它的字符串表示形式(对其调用
ToString()
的结果)


为了通过TCP发送对象,您需要先对其进行序列化,然后在服务器端对其进行反序列化。您可以使用任意数量的二进制、XML、JSON等格式化程序来执行此操作,也可以自己编写。

是“
detailList
”您的
ArrayList
,还是您的detailist中有ArrayList?我不知道JSON或XML,所以我想简单搜索一下“tcpclient对象序列化”就可以了如果这真的是你认为你需要的,它会返回足够多的点击量来让你开始。如果您只是希望发送一个以逗号分隔的字符串列表或其他内容,然后在管道的另一端手动重新创建该列表,那么您已经需要一个非常简单的序列化/反序列化实现。