请教一个socket编程的问题:一个socket连接,可以多次post数据到web

spark_li 2015-03-09 05:04:19
服务器是apache搭建的,支持keep-alive,人家配套的客户端程序可以和服务器保持一个tcp连接,然后可以多次post相同、不同的数据;抓包分析也是这样的,连接没有变的。

需要自己单独写个辅助程序,实现另外的功能,问题来了,连接一次,只能post一次数据。
弱弱的测试代码如下:请教大神如何修改,能建立好socket连接后,可以重复post,谢谢了。


Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

Dim endPoint As New IPEndPoint(IPAddress.Parse("10.255.1.100"), 80)

Dim s As New Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)

s.Connect(endPoint)

If s.Connected Then

dim data as string="xxxxxxxx"

Dim ascii As Encoding = System.Text.Encoding.UTF8
Dim buf As New StringBuilder
buf.Append("POST /httpServlet HTTP/1.1" & vbCrLf)
buf.Append("Content-Type: application/x-www-form-urlencoded" & vbCrLf)
buf.Append("Connection: Keep-Alive" & vbCrLf)
buf.Append("Content-Length: " & data.Length & vbCrLf & vbCrLf & vbCrLf)

buf.Append(data & vbCrLf)
Dim bytesSent As [Byte]() = ascii.GetBytes(buf.ToString)
Dim bytesReceived(4096) As [Byte]

s.Send(bytesSent, bytesSent.Length, 0)


Dim bytes As Int32

Dim page As [String] = ""
Dim i As Integer = 0

bytes = s.Receive(bytesReceived, bytesReceived.Length, 0)

page = page + System.Text.Encoding.GetEncoding("GB2312").GetString(bytesReceived, 0, bytes)


txtLog.Text = page.ToString

'想继续发送就不行了,发现连接已经被断开了。。。
s.Send(bytesSent, bytesSent.Length, 0)

End If

End Sub



...全文
362 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheNextGates 2015-03-17
  • 打赏
  • 举报
回复
请问socket是什么?
spark_li 2015-03-14
  • 打赏
  • 举报
回复
已经实现了多次post了, 现在的问题是,只能连续post 100次左右,socket就被断开了。 抓包发现,是突然收到了来自服务器的 fin +ack 包, 然后客户端就发了一个rst包给服务器。。。 请教一下,有没有办法不用管接受,以最高效率不断的发数据给服务器呢?
spark_li 2015-03-09
  • 打赏
  • 举报
回复
要有人家的代码就好了,关键是没有啊。 我的需求是,能一个 tcp连接,可以重复post多次数据,目前只能post一次, 想要再post,必须重新建立连接。
  • 打赏
  • 举报
回复
贴出“人家配套的客户端程序”的代码来。 你的程序没有必要管它什么 keep-alive,也没有必要写这么多行代码。只要短连接地能够 post 数据就可以了。

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧