網絡(VFB教程3-5)

  勇芳 2018-2-18 7412

此處為VisualFreeBasic編程教程(從零開始學或VB進階)的子章節部分,全部目錄點鏈接。

網絡,FB沒有提供專門的函數,只有自己寫。

if IsConnectedToInternet then print "有網" else print "無網"

有個網絡庫供我們用,只是遺憾沒有64位的

GET方法獲取網頁

print  Http_Get( "http://www.departingmelbourne.com")
URL:字符串,目標域名或者IP地址+,目標頁面的路徑
ref:字符串,引用頁面
user:字符串,用戶名,如不需要則填空
pwd:字符串,密碼,如不需要則填空

Post方法獲取網頁

print Http_Post( "http://www.departingmelbourne.com")

Http_Get 和 Http_Post ,都寫在VFB的函數庫里,我們是需要簡單的調用,很遺憾不支持64位軟件。

網絡是一個大的學科,GET 與 Post 什么不同,請自行百度,自有解釋,我只管VFB可以直接讀到。


2臺電腦網絡通信(UDP方式),同樣很遺憾不支持64位軟件。

例題:
Dim Shared hSockas Any Ptr 
創建
hSock=network_UDP_Create(@xSock_UDP_Proc,6)
銷毀
UDP_Destroy(hSock)
發送
network_UDP_Send Sock1,"內容","192.168.1.116",6
 回調
Sub xSock_UDP_Proc(Sock as Integer, nEvent as Integer, lpOverlapped as Any Ptr, Size as Integer, Custom as Integer)
                Sock 創建時返回的那個指針  nEvent 事件  lpOverlapped 數據指針   長度                自定
Print Sock, nEvent , lpOverlapped , Size , Custom
    Select Case nEvent
        Case IOCP_UDP_RECV '數據到達
                Dim RecvPack as ZString Ptr
                Dim RecvIP as ZString Ptr
                Dim RecvPort as UShort
                RecvPack = UDP_Read(lpOverlapped, RecvIP, RecvPort)
                '取到達數據指針與地址 [重疊地址] [IP地址] [端口]
                Print "數據到達" &  Hex(RecvPack),RecvIP,RecvPort
                If RecvPack Then
                    FF_Control_SetText( HWND_FORM1_TEXT4, *RecvPack )
                EndIf
        Case IOCP_UDP_SEND '發送成功
            Print "發送成功"
        Case IOCP_UDP_ESEND '發送失敗
            Print "發送失敗"
    End Select
End Sub

我們可以直接調用API,操縱每個環節,實現自己想要的。而且支持32 64 軟件

#include Once "win/winsock2.bi"   第一步要引用,放在 FF_AppStart 模塊里

初始化WinSock

  aa=doInit()
  If aa Then print "初始化 WinSock 失?。?!"

分離網址與路徑

URL_FenLiYuMinLuJing( "http://www.departingmelbourne.com/soft-188.html", hostname, path,port ) '已經在函數庫里
hostname="www.departingmelbourne.com"
path="/soft188.html"
port =80

網址轉換成數字IP地址

  ip = resolveHost( hostname )
  If ( ip = 0 ) Then print "網址不能轉換成IP"

打開Sock

  Dim s As SOCKET = opensocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
  'af為協議地址族,這里我們使用IPv4,必須為AF_INET
  'type為socket類型,如果使用TCP/IP,type設為SOCK_STREAM,如果使用UDP,則為SOCK_DGRAM
  'protocol在給定的地址族及socket類型有多個入口的情況下用來限定特定的傳輸,對于TCP其值為IPPROTO_TCP,而UDP則為IPPROTO_UDP
  If  s = 0  Then 無法打開Sock

連接到主機

Dim sa As sockaddr_in
  sa.sin_port        = htons( duiko )
  sa.sin_family      = AF_INET
  sa.sin_addr.S_addr = ip
  If ( connect( s, Cast( PSOCKADDR, @sa ), SizeOf( sa ) ) = SOCKET_ERROR ) Then
      reportError( "連接到主機connect()" )
      closesocket( s ) '關閉socket
      Return 1
  End If

send HTTP 請求

  sendBuffer = "GET /" + path + " HTTP/1.0" + Chr(13,10) + _
               "Host: " + hostname + Chr(13,10) + _
               "Connection: close" + Chr(13,10) + _
               "User-Agent: GetHTTP 0.0" + Chr(13,10) + _
                 Chr(13,10)
  If ( send( s, sendBuffer, Len( sendBuffer ), 0 ) = SOCKET_ERROR ) Then
      print  "HTTP 請求失敗"
      closesocket( s )
      Return 1
  End If

接收數據直到連接關閉

  Dim by(4097) As Byte
Do
  bytes = recv( s, @by(0), 4096, 0 )
  If( bytes <= 0 ) Then
      Exit Do
  End If
  recvbuffer=String(bytes,0)
  memcpy SAdd(recvbuffer),@by(0),bytes
    tob +=Left(recvbuffer,bytes)
Loop
print tob  '接收完全部數據

最后關閉

shutdown( s, 2 ) '關閉socket
closesocket( s ) '關閉socket
WSACleanup '釋放

基本步夠就這些,更多只能買本書慢慢啃了,因為太多了。

因國家互聯網安全管理要求,關閉回帖功能。大家需要留言,請使用【勇芳軟件客服】即時聯系勇芳點此打開->>勇芳軟件客服
返回
聯系勇芳
一个人看的www视频播放中文_2012中文字幕电影_亚洲国产成人高清在线观看_中文字幕天堂最新版在线网