MSDN上的异步socket 服务端例子

2006-11-22 17:12:01|  分类: 代码学习 |  标签: |字号大中小 订阅

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

' State object for reading client data asynchronously
'
Public Class StateObject
    ' Client  socket.
    Public workSocket As Socket = Nothing
    ' Size of receive buffer.
    Public Const BufferSize As Integer = 1024
    ' Receive buffer.
    Public buffer(BufferSize) As Byte
    ' Received data string.
    Public sb As New StringBuilder()
End Class 'StateObject

Public Class AsynchronousSocketListener

' Incoming data from the client.
    Public Shared data As String = Nothing

' Thread signal.
    Public Shared allDone As New ManualResetEvent(False)

Public Sub New()

End Sub 'New

Public Shared Sub StartListening()
        ' Data buffer for incoming data.
        Dim bytes() As Byte = New [Byte](1024) {}

' Establish the local endpoint for the socket.
        ' The DNS name of the computer
        ' running the listener is "host.contoso.com".
        Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
        Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
        Dim localEndPoint As New IPEndPoint(ipAddress, 11000)

' Intializes a TCP/IP socket.
        Dim listener As New Socket(AddressFamily.InterNetwork, _
            SocketType.Stream, ProtocolType.Tcp)

' Bind the socket to the local endpoint and listen for incoming
        ' connections.
        Try
            listener.Bind(localEndPoint)
            listener.Listen(100)

While True
                ' Set the event to nonsignaled state.
                allDone.Reset()

' Start an asynchronous socket to listen for connections.
                Console.WriteLine ( "Waiting for a connection..." )
                listener.BeginAccept(New AsyncCallback(AddressOf AcceptCallback), _
                listener)

' Wait until a connection is made before continuing.
                allDone.WaitOne()
            End While

Catch e As Exception
            Console.WriteLine(e.ToString())
        End Try

Console.WriteLine(ControlChars.Cr + "Press ENTER to continue...")
        Console.Read()
    End Sub 'StartListening

Public Shared Sub AcceptCallback(ByVal ar As IAsyncResult)
        ' Signal the main thread to continue.
        allDone.Set()

' Get the socket that handles the client request.
        Dim listener As Socket = CType(ar.AsyncState, Socket)
        Dim handler As Socket = listener.EndAccept(ar)

' Create the state object.
        Dim state As New StateObject()
        state.workSocket = handler
        handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, _
            New AsyncCallback(AddressOf ReadCallback), state)
    End Sub 'AcceptCallback

Public Shared Sub ReadCallback(ByVal ar As IAsyncResult)
        Dim content As [String] = [String].Empty

' Retrieve the state object and the handler socket
        ' from the asynchronous state object.
        Dim state As StateObject = CType(ar.AsyncState, StateObject)
        Dim handler As Socket = state.workSocket

' Read data from client socket.
        Dim bytesRead As Integer = handler.EndReceive(ar)

If bytesRead > 0 Then
            ' There might be more data, so store the data received so far.
            state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, _
                bytesRead))

' Check for end-of-file tag. If it is not there, read
            ' more data.
            content = state.sb.ToString()
            If content.IndexOf("<EOF>") > -1 Then
                ' All the data has been read from the
                ' client. Display it on the console.
                Console.WriteLine( "Read {0} bytes from socket. " + _
                    ControlChars.Cr + " Data : {1}", content.Length, content)
                ' Echo the data back to the client.
                Send(handler, content)
            Else
                ' Not all data received. Get more.
                handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, _
                    0, New AsyncCallback(AddressOf ReadCallback), state)
            End If
        End If
    End Sub 'ReadCallback

Private Shared Sub Send(ByVal handler As Socket, ByVal data As [String])
        ' Convert the string data to byte data using ASCII encoding.
        Dim byteData As Byte() = Encoding.ASCII.GetBytes(data)

' Begin sending the data to the remote device.
        handler.BeginSend(byteData, 0, byteData.Length, 0, _
            New AsyncCallback(AddressOf SendCallback), handler)
    End Sub 'Send

Private Shared Sub SendCallback(ByVal ar As IAsyncResult)
        Try
            ' Retrieve the socket from the state object.
            Dim handler As Socket = CType(ar.AsyncState, Socket)

' Complete sending the data to the remote device.
            Dim bytesSent As Integer = handler.EndSend(ar)
            Console.WriteLine("Sent {0} bytes to client.", bytesSent)

handler.Shutdown(SocketShutdown.Both)
            handler.Close()

Catch e As Exception
            Console.WriteLine(e.ToString())
        End Try
    End Sub 'SendCallback

'Entry point that delegates to C-style main Private Function.
    Public Overloads Shared Sub Main()
        System.Environment.ExitCode = _
        Main(System.Environment.GetCommandLineArgs())
    End Sub

Public Overloads Shared Function Main(ByVal args() As [String]) As Integer
        StartListening()
        Return 0
    End Function 'Main
End Class 'AsynchronousSocketListener

转载于:https://www.cnblogs.com/shuenjian901/p/3517328.html

MSDN上的异步socket 服务端例子相关推荐

  1. java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包

    使用Java抓取Socket通信TCP数据包 使用WireShark默认使用的是winpcap去抓本地环回的数据包,需要安装npcap再在Wireshark选择本地环回的网卡抓包 在Java-Sock ...

  2. android socket 服务端,Android socket 服务端

    Android socket 服务端 Android 想在Android 上跑一个 socket 服务端.把在java工程里运行起来的代码直接放到android项目里来,开启线程,创建ServerSo ...

  3. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  4. [置顶] C#中Socket服务端代码分享

    最近在对项目中Socket通讯中的服务端代码进行优化,保证能接受尽可能多的客户端的连接,并且不会丢掉连接,不会掉数据包.经过一段时间的反复测试和修改,终于达到了这一要求.服务端代码采用了异步通讯的方式 ...

  5. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  6. Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView

    Socket服务端简单地API: 主要用到以下几个API:ServerSocket用来设置端口号.accept用来和服务端连接.getInputStream用来获取输入流.read用来读取输入流里面的 ...

  7. 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写

    一.学习目标 了解C语言的socket的概念 了解C语言socket的使用方法 完成C语言socket服务端 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习 ...

  8. 在云服务器搭建 socket服务端

    1.环境:腾讯云服务器.ubuntu16.python3.git 2.在自己电脑(我的win10)用python3写好socket服务端代码,上传到自己的GitHub,然后在云服务器里git clon ...

  9. Socket服务端向指定客户端发送消息

    Socket服务端向指定客户端发送消息 解决思想 1.项目背景 2.如何上传与下发指令 3.解决方法 4.流程 解决思想 I.指定客户端远程地址是存起来的. II.服务端直接主动发信息给客户端,问题在 ...

最新文章

  1. linux小脚本批量添加/删除用户
  2. 面试AI算法岗,你被要求复现顶会了嘛?
  3. IP、TCP、UDP报文头说明
  4. C学习杂记(五)形参实参笔试题
  5. cloudera-quickstart-vm-5.13.0-0-virtualbox 中文显示乱码
  6. android webview 图表,Android WebView 无法正常显示网页图表
  7. python预测股票价格tushare_用tushare对股票进行简单分析
  8. Notepad++ 6.0 发布,优化了大文件加载性能
  9. 输入法设置,SublimeTest,putty掉线
  10. 面向集团客户云计算运营平台的市场情况及产品发展——之云计算运营平台方案(二)...
  11. Oracle 动态视图3 V$SESSION
  12. 读书百客:《陋室铭》赏析
  13. SpringBoot使用之yaml配置注入(推荐使用)
  14. vue项目之H5 app 生成海报功能
  15. Altera的IP核
  16. Dreamweaver 8 的注册码
  17. 彩色图像--伪彩处理 灰度图转伪彩色图像
  18. Netfilter源码分析
  19. IPv6地址三类表示方法
  20. 【WordPress】如何通过tag标签自动给文章插入内链

热门文章

  1. 北工商计算机考研难吗,北京工商大学考研难吗?一般要什么水平才可以进入?...
  2. hdu 1686(标准的kmp,可当模板)
  3. 容器化技术之Docker入门
  4. 转:毕业几年出来来的我们的生活
  5. python怎么做情感分析_如何用python进行情感分析
  6. 定时器name冲突会报错吗_部落冲突:冬季版本即将更新,多个超级兵种被曝光,会上线吗?...
  7. 2021-06-25 WebStorm的设置代码tab宽度等
  8. ArcGIS Pro快速汉化方法
  9. Android 获取唯一机器码的代码
  10. 高级着色语言HLSL入门(5)