关于.Net和VB6中Socket的问题

作者&投稿:罗显 (若有异议请与网页底部的电邮联系)
VB6与VB.NET的差异有哪些?~

.Net平台引入了很多先进的技术,导致了VB6和VB.Net之间产生了一个巨大的鸿沟
就语言功能上来讲,VB.net完全是为了.Net技术而生,具有更好的运行效率和更加强大的功能(某些方面甚至超过了C#)
从语法角度上来讲,VB.net成为了真正的OOP(面向对象语言),不但支持类的继承、派生,还支持委托、泛型等等更加高级的编程技术

如果你是从VB6升级到.net的话,建议要将VB.net当作一门新的语言来学。以VB6的经验来应用到VB.net上是会犯很多错误的

关于从VB6升级到VB.net的代码变换问题,注意以下几个重要的要点即可:
1.不再支持Load、Shell、.LoadPicture等语句
请用相关的.net语句替换
2.String类为引用类,也就是说
Dim s1,s2 as String
s1="FFFFFFF"
s2=s1
此时修改s2的值s1也会跟着相应变化
3.不再支持Variant型和Currency型变量
分别用Object和Demical类型代替
4.变量长度的变化:
VB6的byte、Integer、long型分别被vb.net的byte、short、integer代替,而long型则成为64位大小的整数。新增了UInteger、ULong、SByte等无符号整数类型

不同的内网之间使用路由器(或者路由功能的设备)进行连接, 路由器接到公网上.这种路由功能其实就是NAT, Network Address Translation,网络地址转换.当内网(假设是192.168.0.2)的某个客户端请求连接(该客户端也要开启一个端口,比如QQ的4000)的时候路由器就会在公网上(假设123.123.1.1)给他临时分配一个port,4001,这一步叫端口映射.这样192.168.0.2:4000的请求在公网看来就是123.123.1.1:4001的请求.同样,另外一个内网也会有一个123.123.1.2:4002这样的请求,这样两个内网直接通信.但是没这么简单, 路由器有时候会积极拒绝不请自来的连接请求,所以不是很可靠.
路由器不会接受“不请自来”的连接,关于怎么突破内网通信,我想说一点, 路由器就是 192.168.1.2把这个局域网IP地址转成公网IP地址,比如把192.168.1.2:1001转成113.65.60.44:1002,这样内网就能与公网通信了,但是如果主动连接路由器就会拒绝,所以需要一个第三方的服务器分别于这两个路由进行通信,然后两个内网再直接通信.

但是通过一种方式可以,详见"内网打洞"
给你一个地址http://blog.csdn.net/nicolas16/archive/2007/08/29/1763910.aspx

类库System.Net.Sockets
举两个示例
1、服务器端程序(DateTimeServer.vb)
-------------------------------
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports System.Globalization

Public Class DateTimeServer
Public Shared Sub Main()
Dim now As Date
Dim strDateLine As String
Dim ASCII As Encoding = Encoding.ASCII

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture

Try
Dim tcpl As New TCPListener(13) '在端口 13 上进行侦听
tcpl.Start()

Console.WriteLine("正在等待客户端连接")
Console.WriteLine("按 Ctrl+C 退出...")

While (True)
' 接受将阻塞,直到有人连接
Dim s As Socket = tcpl.AcceptSocket()

' 获取当前日期和时间,然后将
' 其连接为字符串
now = DateTime.Now
strDateLine = now.ToShortDateString() + " " + now.ToLongTimeString()

' 将该字符串转换为 Byte 数组并发送它
Dim byteDateLine() As Byte = ASCII.GetBytes(strDateLine.ToCharArray())
s.Send(byteDateLine, byteDateLine.Length, SocketFlags.None)
s.Close()
Console.WriteLine("已发送 {0}", strDateLine)
End While

Catch socketError As SocketException
If (socketError.ErrorCode) = 10048 Then
Console.WriteLine("连接到此端口失败。有另一台服务器正在此端口上侦听。")
End If
End Try
End Sub
End Class

2、客户端获取服务器端的时间(Client.vb)
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class Client

Public Shared Sub Main()
Dim tcpc As New TCPClient()
Dim read(35) As Byte
Dim args As String() = Environment.GetCommandLineArgs()

If (args.Length < 2) Then
Console.WriteLine("请在命令行中指定服务器名称")
Exit Sub
End If

Dim server As String = args(1)

' 验证服务器是否存在
Try
DNS.GetHostByName(server)
Catch
Console.WriteLine("无法找到服务器:{0}", server)
Exit Sub
End Try

' 尝试连接到服务器
tcpc.Connect(server,13)

' 获取流
Dim s As Stream
Try
s = tcpc.GetStream()
Catch exc As InvalidOperationException
Console.WriteLine("无法连接到服务器:{0}", server)
Exit Sub
End Try

' 读取流并将其转换为 ASCII
Dim bytes As Integer = s.Read(read, 0, read.Length)
Dim Time As String = Encoding.ASCII.GetString(read)

' 显示数据
Console.WriteLine("已接收到 {0} 个字节", bytes)
Console.WriteLine("当前的日期和时间为:{0}", Time)

tcpc.Close()

' 等待用户响应以退出
Console.WriteLine("按 Return 键退出")
Console.Read()
End Sub
End Class

3、将这两个文件保存,然后进入.net提供的编译工具---Visual Studio .NET 2003 命令提示

vbc.exe /target:exe /out:DateTimeServer.exe /r:System.dll DateTimeServer.vb
vbc.exe /target:exe /out:Client.exe /r:System.dll Client.vb

编译成功后,生成两个exe文件,打开服务器端的DateTimeServer.exe程序,用于监听客户端的请求

在MS-DOS命令行中敲入命令Client.exe Localhost

就可以看到效果了

先装vb6 然后装 .net

然后工程添加引用,可以继续用winsock!

但是.不推荐这么用.还是用楼上的办法吧.

vb2005有my明明空间简化很多操作的.先去那边转转


vb和vb.net哪个更快
VB.NET更快 因为基于.net框架,所以不需要调用太多API即可完成任务 VB.NET的功能最强大,不过代价是庞大的visual studio集成环境(VB6才200MB)=== VB.NET是新型的语言,VB用户已经不是很多了,而且在逐渐减少 VB.NET基于VB的语言特点,吸收其他语言的长处,所以会更好 VB不算完全的OOP语言 ...

本人略懂VB6.0,现在学习VB.NET,求同道中人或VB.NET高手赐教
我也是从VB6转型的 一开始有点难度,但以后你会发现,VB.NET用起来爽多了.如果你会VB6,但不会VB.net ,你可以试试,VB.net的升级VB6代码功能,你从简单的开始,升级代码后你会看到区别,一般情况,你的思路不变,所以,你能看懂代码.这样你也就慢慢学会了....

vb.net和vb编程的区别是什么?
.NET Framework包括了CLR(使用通用垃圾收集机制和JIT编译引擎的虚拟机)和大量的类库。VB开发者进入VB.NET要面对新增的大量类库的问题。\\x0d\\x0a\\x0d\\x0a上述变化表明了许多在运行及维护相关优化事宜下面的假定,一些VB6函数和库不再存在而其它的仍然可用,但是比不上.NET语言中自带的可替换的函数和...

vbscript、VB.net、VB是不是都是一样的?现在说VB将要淘汰,是这三种都淘...
.Net是微软操作系统的特点,目前很多高级程序设计语言例如:VC,VB,JAVA都是基于.Net平台的。不过,尽管在VB.Net里,有许多语句与VB6相似,但是只要稍有变化,对于一个程序员来说,都是头痛的事情, 特别是对象方面的变化还是很大的。说VB淘汰是偏见,有数据统计,在目前流行的10多种程序设计语言里,...

VB6是什么啊?
在二十一世纪初,microsoft公司推出Visual Studio 2003与Visual Basic之间有了重大变化,Visual Studio为各种编程工具做了一个平台,Visual Basic.NET可在这种平台上运行。相对于传统VB,有很大的不同。VB.Net,首次使用.Net构架进行可视化编程,并且能很好地与COM构架兼容。2005年Visual Studio 2005则运用了...

想问下,现在学习B语言编程用VB多还是用.NET多。
VBA与VBScript只是语法和VB相同,但功能和VB有些不同。VB在1998年有了VB6.0,也是目前,将来的VB最后的版本。微软在2008年3月就已经停止对VB的更新。换句话说,VB已经过时了。而VB语言的下一个版本,就是微软的.NET Framework (2002年问世)里面的一种开发语言--VB.NET(注意和VB有不同之处,...

Spread版本
Spread技术提供了两种主要的实现形式,即ActiveX版本和.NET版本。ActiveX版本适用于VS6.0环境下的开发,如使用VB6进行编程,其支持的范围是从2.5J到7.0J。相比之下,.NET版本则与.NET平台的开发工具,如VS2005,紧密集成,其版本跨度从1.0到6.0。当需要从ActiveX版本迁移到.NET版本时,由于缺乏专用...

用vb.net只是做一个简单的小程序,可以像vb6那样生成一个不需要安装的...
1. 首先,VB.NET的Debug文件夹里可以看到.exe文件,在有安装Framework的电脑上可以直接运行。 2. VB6是可以在Win 7上运行的,安装的时候会弹出兼容性窗口,不要理他,继续安装。 我是Win 7 32位和64位,都用VB6

Vb6.0和vs2010里的vb有什么不同?
Vb6.0和vs2010里的vb区别为:运行环境不同、对齐不同、名称属性不同。一、运行环境不同 1、Vb6.0:Vb6.0的运行环境为运行于VB虚拟机之中。2、vs2010里的vb:vs2010里的vb的运行环境为运行于.net虚拟机之中。二、对齐不同 1、Vb6.0:Vb6.0有像素点可以直接用来对齐和调整控件。2、vs2010里...

VB6已经渐渐落后了,开始VB.net。那office 2007的VBA用的是什么?_百度...
还是VBA,既不是VB.net,也不是VB6 不过VBA的使用方法和VB6.0相当的接近,语句也是99.99%以上是一致的,我是先接触的excle中的VBA,后学的VB6.0,说实话,我还木有发现VBA和VB6.0在语句上有啥不一样的地方,你如果是初学者的话,可以找一本VB6.0的书,用VB6.上面的语句在office VBA上演示...

青山湖区17894898370: 在VB6中如何实现socket通信? -
野秀止血: 有控件呀.右击工具箱栏,选部件,然后在列表里中下部左右找到 Microsoft Winsock Control 6.0 .选中它,按确定,那这个控件就出来了.具体用户可以看看书或是上网查资料,这里不方便贴出.

青山湖区17894898370: java编程中,Socket通信是怎么实现的? -
野秀止血: java编程对于Socket之间的通信过程如下:服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容.Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的...

青山湖区17894898370: 关于vb.net中Socket的问题 -
野秀止血: 我不给你代码了,我才编了SOCKET的,告诉你原理吧(我的编程经验而已) SOCKET传输文件和接受是有大小限制的,默认是81**来则也就是8K多,你可以改小,但改大我没试过,然后你必须把文件分成若干份,然后传过去,然后在接收端...

青山湖区17894898370: java中socket什么意思 -
野秀止血: 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端...

青山湖区17894898370: .net编程中,如何用socket获得局域网中其他计算机的ip以及端口?
野秀止血: 有api可用,socket是可以跨平台的.不会因为环境而改变用法,你还是看看windows下的socket编程吧.

青山湖区17894898370: vb中 如何用Socket连接两台(或多台)计算机? -
野秀止血: 听你的意思,单对单的你应该会了.现在有服务端和客户端,服务端程序你可以多搞几个socket控件,就可以实现一对多了.这几个socket控件你可以做成控件数组.以方便代码 另外要注意的是:多个socket不能同时侦听同一端口,但是你可以在第一个socket连接成功后,第二个socket再来侦听同一端口,当然你也可以做成不同端口

青山湖区17894898370: VB.NET的Socket怎么用 -
野秀止血: 用VB.NET里的.NET类库实现更加直观,容易. 你如果没用过,可以查看下MSDN里面的文档, System.Net 下.

青山湖区17894898370: vb.net中关于 socket的连接服务器失败问题! 怎么处理连接失败? -
野秀止血: 用 try-catch 结构,捕获 SocketException,示例:Try // 可能产生错误的代码 Catch ex As SocketException MessageBox.Show("连接失败,原因是:" & ex.Message) End Try P.S. 好久不写 VB.NET 的了,这个是根据 C# 和记忆中的样子写的,题主看明白思路就好.

青山湖区17894898370: vb.net socket如何保持连接 -
野秀止血: Dim s As Socket Private Shared Function ConnectSocket(ByVal server As String, ByVal port As Integer) As Socket'创建连接Dim s As Socket = NothingDim hostEntry As IPHostEntry = Nothing Dim address As IPAddressaddress = System....

青山湖区17894898370: javaweb能完成socket通信吗? -
野秀止血: 可以,在JSP或Servlet写Socket连接代码就可以,不过不建议这么做.如果控制不...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网