MSDN上的异步socket 服务端例子
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 服务端例子相关推荐
- java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包
使用Java抓取Socket通信TCP数据包 使用WireShark默认使用的是winpcap去抓本地环回的数据包,需要安装npcap再在Wireshark选择本地环回的网卡抓包 在Java-Sock ...
- android socket 服务端,Android socket 服务端
Android socket 服务端 Android 想在Android 上跑一个 socket 服务端.把在java工程里运行起来的代码直接放到android项目里来,开启线程,创建ServerSo ...
- 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...
- [置顶] C#中Socket服务端代码分享
最近在对项目中Socket通讯中的服务端代码进行优化,保证能接受尽可能多的客户端的连接,并且不会丢掉连接,不会掉数据包.经过一段时间的反复测试和修改,终于达到了这一要求.服务端代码采用了异步通讯的方式 ...
- Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受
一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类 Serve ...
- Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView
Socket服务端简单地API: 主要用到以下几个API:ServerSocket用来设置端口号.accept用来和服务端连接.getInputStream用来获取输入流.read用来读取输入流里面的 ...
- 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写
一.学习目标 了解C语言的socket的概念 了解C语言socket的使用方法 完成C语言socket服务端 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习 ...
- 在云服务器搭建 socket服务端
1.环境:腾讯云服务器.ubuntu16.python3.git 2.在自己电脑(我的win10)用python3写好socket服务端代码,上传到自己的GitHub,然后在云服务器里git clon ...
- Socket服务端向指定客户端发送消息
Socket服务端向指定客户端发送消息 解决思想 1.项目背景 2.如何上传与下发指令 3.解决方法 4.流程 解决思想 I.指定客户端远程地址是存起来的. II.服务端直接主动发信息给客户端,问题在 ...
最新文章
- linux小脚本批量添加/删除用户
- 面试AI算法岗,你被要求复现顶会了嘛?
- IP、TCP、UDP报文头说明
- C学习杂记(五)形参实参笔试题
- cloudera-quickstart-vm-5.13.0-0-virtualbox 中文显示乱码
- android webview 图表,Android WebView 无法正常显示网页图表
- python预测股票价格tushare_用tushare对股票进行简单分析
- Notepad++ 6.0 发布,优化了大文件加载性能
- 输入法设置,SublimeTest,putty掉线
- 面向集团客户云计算运营平台的市场情况及产品发展——之云计算运营平台方案(二)...
- Oracle 动态视图3 V$SESSION
- 读书百客:《陋室铭》赏析
- SpringBoot使用之yaml配置注入(推荐使用)
- vue项目之H5 app 生成海报功能
- Altera的IP核
- Dreamweaver 8 的注册码
- 彩色图像--伪彩处理 灰度图转伪彩色图像
- Netfilter源码分析
- IPv6地址三类表示方法
- 【WordPress】如何通过tag标签自动给文章插入内链
热门文章
- 北工商计算机考研难吗,北京工商大学考研难吗?一般要什么水平才可以进入?...
- hdu 1686(标准的kmp,可当模板)
- 容器化技术之Docker入门
- 转:毕业几年出来来的我们的生活
- python怎么做情感分析_如何用python进行情感分析
- 定时器name冲突会报错吗_部落冲突:冬季版本即将更新,多个超级兵种被曝光,会上线吗?...
- 2021-06-25 WebStorm的设置代码tab宽度等
- ArcGIS Pro快速汉化方法
- Android 获取唯一机器码的代码
- 高级着色语言HLSL入门(5)