[郁闷,救命]使用Socket编程出了问题
小弟我第一次想用vb.net编写一个socket程序,结果就出了问题。程序的功能很简单,就是 将域名转成ip地址--连接到ip上--下载默认网页--存成文件。 结果域名转ip没问题,也可以连接到ip上,向服务器发送下载命令也成功了,结果死活不能接受数据,不知道什么原因啊?
代码结构如下:
_________________________________________
Imports System.Net
Imports System.Net.Sockets
_________________________________________
Dim m_Host As IPHostEntry
Dim m_EP As IPEndPoint
Dim m_Sock As Socket
_________________________________________
Private Sub NetMain()
Dim ipAddr As IPAddress
'
'get ip
'
m_Host = Dns.Resolve(HostText.Text)
ipAddr = m_Host.AddressList(0)
'
'init socket
'
m_EP = New IPEndPoint(ipAddr, 80)
m_Sock = New Socket(AddressFamily.InterNetwork,SocketType.Stream,
ProtocolType.Tcp)
'
'connect
'
Try
m_Sock.Connect(m_EP)
Catch ex As Exception
Exit Sub
End Try
If Not m_Sock.Connected Then
Exit Sub
End If
'
'get web page,发送下载命令
'
Dim GetPage, RecvPage As String
Dim ByteGet(), ByteRecv(255) As Byte
Dim r As Integer
GetPage = "GET / HTTP/1.1\r\nHost: " + HostText.Text + "\r\nConnection: Close\r\n\r\n"
ByteGet = System.Text.ASCIIEncoding.ASCII.GetBytes(GetPage)
Try
m_Sock.Send(ByteGet, ByteGet.Length, SocketFlags.None)
Catch ex As Exception
Exit Sub
End Try
'
'循环接受数据
'
'============问题代码,数据为何无法接收??到这程序就无限等待了
r = m_Sock.Receive(ByteRecv, ByteRecv.Length, 0)
RecvPage = System.Text.ASCIIEncoding.ASCII.GetString(ByteRecv, 0, r)
While r > 0
r = m_Sock.Receive(ByteRecv, ByteRecv.Length, 0)
RecvPage += System.Text.ASCIIEncoding.ASCII.GetString(ByteRecv, 0, r)
End While
'…………其他代码
End Sub
那位大侠解释一二???