找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4085|回复: 11

VB.NET让您发现调用Socket接收和发送的世界是多么的简单实现

[复制链接]
发表于 2017-5-11 22:32:38 | 显示全部楼层 |阅读模式
先查看MSDN帮助系统,找到socket类,有详细的创建套接字、使用套接字侦听、使用客户端套接字的说明。
打开VS.Net 2003,新建一个VB.Net工程,名称为Server。在界面上添加一个列表框,两个按钮。界面如图所示:

[附件已丢失]

我们使用多线程来实现
先导入命名空间:
Imports System.Net.sockets
Imports System.net
Imports System.Text
Imports System.Threading
定义两个窗体变量
Dim s As Socket = Nothing
Dim t As Thread
新建一个过程,用于处理接收到的Socket数据包
Public Sub WaitData()
        s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) '''使用TCP协议
        Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)  '''指定IP和Port
        s.Bind(localEndPoint)        '''绑定到该Socket
        s.Listen(100)     '''侦听,最多接受100个连接
        While (True)
            Dim bytes(1024) As Byte   '''用来存储接收到的字节
            Dim ss As Socket = s.Accept()  '''若接收到,则创建一个新的Socket与之连接
            ss.Receive(bytes)    '''接收数据,若用ss.send(Byte()),则发送数据
            ListBox1.Items.Insert(0, Encoding.Unicode.GetString(bytes)) '''将其插入到列表框的第一项之前
            '''若使用Encoding.ASCII.GetString(bytes),则接收到的中文字符不能正常显示
        End While
End Sub
在BtnStart的click事件中,加入如下代码:
t = New Thread(AddressOf WaitData)  '''建立新的线程
        t.Start()     '''启动线程
        BtnStart.Enabled = False   '''按钮不可用,避免另启线程
在BtnStop的click事件中,加入如下代码:
Try
            s.Close()     '''关闭Socket
            t.Abort()     '''中止线程
        Catch
        Finally
            BtnStart.Enabled = True   '''启用BtnStart
        End Try
为了防止用户不点击Stop直接退出,而不能使线程结束,则应在窗体的closing事件中,加入如下代码:
Try
            s.Close()
            t.Abort()
        Catch
        End Try

下面新建一个VB.Net工程,名称为Client。在界面上添加一个文本框,一个按钮。界面如图所示:

[附件已丢失]


先导入命名空间:
Imports System.Net.sockets
Imports System.net
Imports System.Text

在BtnSend的click事件中,加入如下代码:
Try
            Dim bytes(1024) As Byte
            Dim s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)
            s.Connect(localEndPoint)
            s.Send(Encoding.Unicode.GetBytes(TextBox1.Text))
            s.Close()
        Catch ex As Exception

        End Try
这样,这个小程序就完成了,当然可以添加新的功能,使其功能更强大!

主要开发环境是Visual Studio 2008,Visual Studio系列产品一直以来都提供了强大的控件功能,然而我们利用这些控件可以编写出功能强大的应用程序。本文主要利用微软的最新.net开发工具为大家展示一个发送与接收端程序的开发过程,让大家对Socket更加熟悉,很适合.net开发工具的初学者,具有一定的实用价值。 
  打开 Visual Studio 2008在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序(Windows Application)。单击确定 (OK) 如图1。
  


[附件已丢失]

  我们需要创建两个窗体,一个是发送端(Form1窗体),另外一个是接收端(Form2窗体)
  详细操作步骤如下:
  选择Form1窗体,在Form1窗体中添加如下控件:
  Label1、Label2、Label3、 Button1控件、OpenFileDialog1控件
  控件属性设置如下:  
  Label1 属性Text 已经发送的文件长度:
  Label2 属性Text 为空
  Label3 属性Text 字节数
  Button1 属性Text 发送文件  
  最终界面效果如下:
  


[附件已丢失]

  选择Form2窗体,在Form2窗体中添加如下控件:
  Label1、Label2、TextBox1 、Button1控件、OpenFileDialog1控件、SaveFileDialog1控件
  控件属性设置如下:
  Label1 属性Text 已接收的文件:
  Label2 属性Text 为空
  TextBox1 属性Multiline
  属性ScrollBars True
  Both
  Button1 属性Text 接收文件并保存
  最终界面效果如下:
  
  


[附件已丢失]

  好了界面工作已经完成了,接下来我们需要输入代码了
  选择Form1窗体,进入代码编辑器中
  首先我们需要进行声明:
  Imports System.Net.Sockets
  Imports System.Net
  Imports System.IO  
  Public Class Form1
  Inherits System.Windows.Forms.Form  
  进入Button1_Click事件中
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim mysocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
  '声明socket
  Dim myipendponit As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888) '建立一个终结点
  OpenFileDialog1.Filter = "文本文件(.txt) *.txt"
  OpenFileDialog1.InitialDirectory = "c:\"
  If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
  Dim fs As New IO.FileStream(OpenFileDialog1.FileName, _
  IO.FileMode.OpenOrCreate, IO.FileAccess.Read) '你所要传输的文件
  Dim ssize(fs.Length - 1) As Byte
  Dim br As New BinaryReader(fs) '处理要传输的文件
  br.Read(ssize, 0, ssize.Length - 1)
  
  mysocket.Connect(myipendponit) '连接到远程计算机
  mysocket.Send(ssize) '发送文件
  Label2.Text = fs.Length()
  fs.Close()
  mysocket.Shutdown(Net.Sockets.SocketShutdown.Send)
  '关闭已发送连接
  mysocket.Close() '关闭本机socket
  End If
  End Sub  
  进入Form1_Load事件中
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim window2 As New Form2()
  window2.Show()
  End Sub  
  选择Form2窗体,进入代码编辑器中


  首先我们需要进行声明:  
  Imports System.Net.Sockets
  Imports System.Net
  Imports System.IO
  Public Class Form2
  Inherits System.Windows.Forms.Form
  Dim receivesocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)  
  进入Form2_Load事件中
  Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim hostipendpoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888)
  receivesocket.Bind(hostipendpoint)
  '建立远程计算机的的socket
  receivesocket.Listen(2) '监听socket
  End Sub

  进入Button1_Click事件中

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  SaveFileDialog1.Filter = "文本文件(.txt) *.txt"

  SaveFileDialog1.FileName = "接收的文件.txt"

  SaveFileDialog1.InitialDirectory = "c:Mytext"  

  If SaveFileDialog1.ShowDialog() = DialogResult.OK Then

  Dim fs As New IO.FileStream(SaveFileDialog1.FileName, _

  IO.FileMode.OpenOrCreate)

  '接收数据并将其保存到一个新的文件

  Dim rebyte(229888) As Byte

  Dim myhostsocket As Socket = receivesocket.Accept()

  '发送端计算机建立连接

  Dim wr As New BinaryWriter(fs) '流写

  myhostsocket.Receive(rebyte)

  wr.Write(rebyte, 0, rebyte.Length - 1)

  fs.Close()

  myhostsocket.Shutdown(SocketShutdown.Receive)

  myhostsocket.Close()

  Label2.Text = SaveFileDialog1.FileName


  '读取已保存的文件

  Dim Readw As StreamReader

  Readw = File.OpenText(SaveFileDialog1.FileName)  

  ' 设置指针到开始位置

  Readw.BaseStream.Seek(0, SeekOrigin.Begin)

  Readw.BaseStream.Position = 0

  While (Readw.Peek() > -1)

  TextBox1.Text += Readw.ReadLine() & vbCrLf

  End While

  Readw.Close()  

  End If

  End Sub  

  好了代码输入完毕,接下来我们来运行程序测试一下

  程序启动后会弹出Form1窗体(发送端)和Form2窗体(接收端),我们选择Form1窗体(发送端)点击发送按钮,随意选择一个文本文件即可,看一看效果,如图4


[附件已丢失]

  接下来我们需要选择Form2窗体(接收端)点击接收文本并保存按钮图5
  


[附件已丢失]

  
  这个窗体是利用了TCP协议进行了数据的通信,在传输时必须设置同时打开发送与接收端窗体才能进行数据的传输。如图6
  
  


[附件已丢失]

  通过以上的测试,程序运行成功,我们主要利用了Socket以及TCP文件传输的技术进行了数据的发送与接收,希望此程序实例能够给大家带来帮助。



qq.jpg
ide1.jpg
ide2.jpg
13092497386403.jpg
13092497381151.jpg
13092497396639.jpg
13092497399303.jpg
13092497397921.jpg
13092497406424.jpg

0

主题

544

回帖

586

积分

软件网站元老会员

积分
586
发表于 2017-5-12 01:56:11 | 显示全部楼层
的态度结果震惊了意想不到的事情发生了卖家承诺帮我做的图比我预期的还要好看,非常有震慑力,没装修前我店

0

主题

857

回帖

1111

积分

软件网站中级元老会员

积分
1111
发表于 2017-5-13 03:20:18 | 显示全部楼层
按照我的意思做的,中间改了几次,最后很满意,店家费心了,下次再来

0

主题

586

回帖

627

积分

软件网站元老会员

积分
627
发表于 2017-5-14 18:21:18 | 显示全部楼层
底不错,经过沟通后达到了我要求的效果,虽然时间长了一点,但是值得。慢工出细活。满分,态度也很好。

1

主题

1203

回帖

565

积分

abc

积分
565
发表于 2017-5-19 02:29:48 | 显示全部楼层
不错哦,功能很强大,解决了我不少疑惑,只有想不到的,没有他们做不到的,以后有朋友要开发微信公众平台,我会介绍过来的。

0

主题

545

回帖

573

积分

软件网站元老会员

积分
573
发表于 2017-5-21 12:32:34 | 显示全部楼层
下次还会光顾

0

主题

516

回帖

591

积分

软件网站元老会员

积分
591
发表于 2017-5-21 18:52:29 | 显示全部楼层
效、值得信赖!谢谢!

1

主题

574

回帖

612

积分

软件网站元老会员

积分
612
QQ
发表于 2017-5-24 03:27:01 | 显示全部楼层
的很好,对我一个菜鸟很用心的指导!老板还说了,以后不懂的,都可以找他解决!全部五星!嘿嘿~~~

0

主题

534

回帖

598

积分

软件网站元老会员

积分
598
发表于 2017-5-30 08:09:12 | 显示全部楼层
雷,雷雷雷,亲很好,买了好多模板,不痛苦我就换模板

0

主题

552

回帖

591

积分

软件网站元老会员

积分
591
发表于 2017-6-2 05:12:48 | 显示全部楼层
,很高端的视觉效应,很耐心,设计的很不错,高端大气上档次啊,是自己喜欢的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-11 07:50

安卓脚本软件 · 键鼠盒子 · HID · 机械臂

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

随机推荐 · 热帖 / 新帖 / 随便看看

社区会员(随机展示)