转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
P2P的简单示例:VB.net版         ★★★★

P2P的简单示例:VB.net版

作者:闵涛 文章来源:闵涛的学习笔记 点击数:5356 更新时间:2009/4/23 19:00:28

这是用VB.net实现的一个简单的P2P示例.利用了UDP打洞技术.分服务器端跟客户端.服务器端负责登陆记录用户的IP和端口及转发打洞消息.(相关技术在CSDN搜一下.有很多的.).原理到处都有,这里就没有贴出来.这里贴出了VB.net的代码.供初学者交流.也欢迎高手点评...

服务器端在启动成功后.输入help可以查看到服务器相关命令.

客户端在登陆成功后.输入help可以查看客户端相关命令.(登陆时用户名随便.)

以下是服务器端:

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports System.Collections

Module myUDPServer

#Region "全局变量"

    Dim ServerSocket As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
    Dim ipep As IPEndPoint = New IPEndPoint(IPAddress.Any, 11000)

    Dim htUserList As New Hashtable ''''用来保存在线用户和用户的"IP和端口"

    Dim userName(0) As String
    Dim userIPEP(0) As IPEndPoint
    Dim userTime(0) As Integer

    Dim timerDelegate As New TimerCallback(AddressOf onLineTimeOut)

#End Region

#Region "参数"

    ''''以下是客户端到服务器端的消息开头
    Const LOGININ As String = "10"   ''''请求登陆的消息|||消息形式:10+自己的用户名
    Const LOGINOUT As String = "11"  ''''请求登出的消息|||消息形式:11+自己的用户名
    Const GETULIST As String = "12"  ''''请求获得在线用户列表|||消息形式:12
    Const P2PCONN As String = "13"   ''''请求P2P连接的消息|||消息形式:13+自己的用户名+|+对方的用户名
    Const HOLDLINE As String = "14"  ''''保持连接.|||消息开式:14+自己的用户名

    ''''以下是服务器到客户端的消息开头
    Const HVUSER As String = "20"    ''''用户名已存在
    Const GETUSER As String = "21"   ''''在线用户列表|||消息格式:21+用户名+EP
    Const MAKHOLD As String = "22"   ''''打洞命令|||消息格式:22+IP
    Const LOGINOK As String = "23"   ''''登陆成功
    Const SERVCLS As String = "24"   ''''服务器关闭
    Const MSGEND As String = "25"    ''''消息结束

    ''''以下是服务器端的命名
    Const EXITPRO As String = "EXIT" ''''退出命令
    Const SHOWULIST As String = "SHOWUSER"  ''''显示在线用户
    Const HELP As String = "HELP"    ''''显示帮助

#End Region

#Region "方法"

    ''''主函数,程序入口
    Sub Main()

        ''''获得服务器的IP地址
        Dim addressList As System.Net.IPAddress() = Dns.GetHostByName(Dns.GetHostName()).AddressList
        Dim ServerIP As IPAddress = addressList(0)

        ServerSocket.Bind(ipep)
        Console.WriteLine("服务器正在启动....")
        Console.WriteLine("服务器IP:" & ServerIP.ToString & "  正在监听" & ipep.Port.ToString & "端口")
        Dim listenTH As New Thread(AddressOf listen)
        listenTH.Start()  ''''启用监听的线程
        Console.WriteLine("服务器启动成功.....")

        Dim timer As New Timer(timerDelegate, Nothing, 0, 5000)

        Dim SVInput As String
        While True
            Console.Write("Server>")
            SVInput = Console.ReadLine().ToUpper
            Select Case SVInput
                Case EXITPRO
                    listenTH.Abort()
                    ServerSocket.Close()
                    Exit Sub
                Case SHOWULIST
                    showUser()
                Case HELP
                    Console.Write("*********************************" & Chr(10) & Chr(13) & "exit:输出当前程序" & Chr(10) & Chr(13) & "showuser:显示当前在线用户例表" & Chr(10) & Chr(13) & "help:显示帮助" & Chr(10) & Chr(13) & "*********************************" & Chr(10) & Chr(13))
                Case Else
                    Console.WriteLine("*********************************" & Chr(10) & Chr(13) & "笨瓜,你输入的不是有效的命令." & Chr(10) & Chr(13) & "*********************************")
            End Select
        End While


    End Sub

    ''''打印在线用户
    Sub showUser()
        Dim hava As Boolean = False
        If userName.Length <> 0 Then
            Dim i As Integer
            For i = 1 To userName.Length - 1
                If userName(i) <> "" Then
                    hava = True
                    Exit For
                End If
            Next
            If hava = False Then
                Console.WriteLine("*********************************" & Chr(10) & Chr(13) & "当前没有用户在线" & Chr(10) & Chr(13) & "*********************************")
                Exit Sub
            End If
            Console.WriteLine("*********************************")
            For i = 1 To userName.Length - 1
                If userName(i) <> "" Then
                    Console.WriteLine("用户名:" & userName(i) & "  地址:" & userIPEP(i).ToString)
                End If
            Next
            Console.WriteLine("*********************************")
        Else
            Console.WriteLine("*********************************" & Chr(10) & Chr(13) & "当前没有用户在线" & Chr(10) & Chr(13) & "*********************************")
        End If
    End Sub

    ''''服务器监听函数
    Sub listen()

        While True

            Try
                Dim recv As Integer = 0
                Dim data As [Byte]() = New Byte(1024) {}
                Dim sender As New IPEndPoint(IPAddress.Any, 0)
                Dim tempRemoteEP As EndPoint = CType(sender, EndPoint)
                recv = ServerSocket.ReceiveFrom(data, tempRemoteEP)

       

[1] [2] [3] [4] [5] [6] [7] [8]  下一页


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台