找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1956|回复: 1

【VFB】网络(VFB教程3-5)

[复制链接]
发表于 2018-2-26 23:17:21 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
此处为VisualFreeBasic编程教程(从零开始学或VB进阶)的子章节部分,全部目录点链接。网络,FB没有提供专门的函数,只有自己写。
  1. if IsConnectedToInternet then print "有网" else print "无网"
复制代码
有个网络库供我们用,只是遗憾没有64位的GET方法获取网页
  1. print  Http_Get( "http://www.yfvb.com")URL:字符串,目标域名或者IP地址+,目标页面的路径
  2. ref:字符串,引用页面
  3. user:字符串,用户名,如不需要则填空
  4. pwd:字符串,密码,如不需要则填空
复制代码
Post方法获取网页
  1. print Http_Post( "http://www.yfvb.com")
复制代码
Http_Get 和 Http_Post ,都写在VFB的函数库里,我们是需要简单的调用,很遗憾不支持64位软件。网络是一个大的学科,GET 与 Post 什么不同,请自行百度,自有解释,我只管VFB可以直接读到。
2台电脑网络通信(UDP方式),同样很遗憾不支持64位软件。
  1. 例题:
  2. Dim Shared hSockas Any Ptr
  3. 创建
  4. hSock=network_UDP_Create(@xSock_UDP_Proc,6)
  5. 销毁
  6. UDP_Destroy(hSock)
  7. 发送
  8. network_UDP_Send Sock1,"内容","192.168.1.116",6
  9. 回调
  10. Sub xSock_UDP_Proc(Sock as Integer, nEvent as Integer, lpOverlapped as Any Ptr, Size as Integer, Custom as Integer)
  11.                 Sock 创建时返回的那个指针  nEvent 事件  lpOverlapped 数据指针   长度                自定
  12. Print Sock, nEvent , lpOverlapped , Size , Custom
  13.     Select Case nEvent
  14.         Case IOCP_UDP_RECV '数据到达
  15.                 Dim RecvPack as ZString Ptr
  16.                 Dim RecvIP as ZString Ptr
  17.                 Dim RecvPort as UShort
  18.                 RecvPack = UDP_Read(lpOverlapped, RecvIP, RecvPort)
  19.                 '取到达数据指针与地址 [重叠地址] [IP地址] [端口]
  20.                 Print "数据到达" &  Hex(RecvPack),RecvIP,RecvPort
  21.                 If RecvPack Then
  22.                     FF_Control_SetText( HWND_FORM1_TEXT4, *RecvPack )
  23.                 EndIf
  24.         Case IOCP_UDP_SEND '发送成功
  25.             Print "发送成功"
  26.         Case IOCP_UDP_ESEND '发送失败
  27.             Print "发送失败"
  28.     End Select
  29. End Sub
复制代码
我们可以直接调用API,操纵每个环节,实现自己想要的。而且支持32 64 软件
  1. #include Once "win/winsock2.bi"   第一步要引用,放在 FF_AppStart 模块里
复制代码
初始化WinSock
  1.   aa=doInit()
  2.   If aa Then print "初始化 WinSock 失败!!"
复制代码
分离网址与路径
  1. URL_FenLiYuMinLuJing( "http://www.yfvb.com/soft188.html", hostname, path,port ) '已经在函数库里
  2. hostname="www.yfvb.com"
  3. path="/soft188.html"
  4. port =80
复制代码
网址转换成数字IP地址
  1.   ip = resolveHost( hostname )
  2.   If ( ip = 0 ) Then print "网址不能转换成IP"
复制代码
打开Sock
  1.   Dim s As SOCKET = opensocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
  2.   'af为协议地址族,这里我们使用IPv4,必须为AF_INET
  3.   'type为socket类型,如果使用TCP/IP,type设为SOCK_STREAM,如果使用UDP,则为SOCK_DGRAM
  4.   'protocol在给定的地址族及socket类型有多个入口的情况下用来限定特定的传输,对于TCP其值为IPPROTO_TCP,而UDP则为IPPROTO_UDP
  5.   If  s = 0  Then 无法打开Sock
复制代码
连接到主机
  1. Dim sa As sockaddr_in
  2.   sa.sin_port        = htons( duiko )
  3.   sa.sin_family      = AF_INET
  4.   sa.sin_addr.S_addr = ip
  5.   If ( connect( s, Cast( PSOCKADDR, @sa ), SizeOf( sa ) ) = SOCKET_ERROR ) Then
  6.       reportError( "连接到主机connect()" )
  7.       closesocket( s ) '关闭socket
  8.       Return 1
  9.   End If
复制代码
send HTTP 请求
  1.   sendBuffer = "GET /" + path + " HTTP/1.0" + Chr(13,10) + _
  2.                "Host: " + hostname + Chr(13,10) + _
  3.                "Connection: close" + Chr(13,10) + _
  4.                "User-Agent: GetHTTP 0.0" + Chr(13,10) + _
  5.                  Chr(13,10)
  6.   If ( send( s, sendBuffer, Len( sendBuffer ), 0 ) = SOCKET_ERROR ) Then
  7.       print  "HTTP 请求失败"
  8.       closesocket( s )
  9.       Return 1
  10.   End If
复制代码
接收数据直到连接关闭
  1.   Dim by(4097) As Byte
  2. Do
  3.   bytes = recv( s, @by(0), 4096, 0 )
  4.   If( bytes <= 0 ) Then
  5.       Exit Do
  6.   End If
  7.   recvbuffer=String(bytes,0)
  8.   memcpy SAdd(recvbuffer),@by(0),bytes
  9.     tob +=Left(recvbuffer,bytes)
  10. Loop
  11. print tob  '接收完全部数据
复制代码
最后关闭
  1. shutdown( s, 2 ) '关闭socket
  2. closesocket( s ) '关闭socket
  3. WSACleanup '释放
复制代码
基本步够就这些,更多只能买本书慢慢啃了,因为太多了。
回复

使用道具 举报

发表于 2022-5-17 10:30:52 | 显示全部楼层

非常感谢~~支持~~~
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 17:36 , Processed in 0.034757 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表