我已经创建了客户端和服务器应用程序
我正在尝试将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 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
答案 0 :(得分:1)
Button1_Click
中的这一行:
Writer.Write(detailList)
您正在使用Write
的重载版本Object
。为了写出对Objects
有意义的东西,.NET在内部调用了detailList
的{{1}}方法。这里的ToString()
方法是返回字符串“System.Collection.ArrayList”。
因此,您不是要向服务器发送实际的ToString()
实现,而只是发送它的字符串表示(在其上调用ArrayList
的结果)。
要通过TCP发送对象,您需要首先序列化,然后在服务器端反序列化。您可以使用任意数量的二进制,XML,JSON等格式化程序来执行此操作,也可以编写自己的格式。