异步接收请求
例:SocketClie
tBegi
Receivestatebuffer0StateObjectBufferSizeSocketFlagsNo
e
ewAsy
cCallbackReceiveCallbackstate
其中Asy
cCallback异步委托类为相应异步操作完成后,继续调用。Asy
cCallback为客户端应用程序提供完成异步操作的方法。开始异步操作时,该回调委托被提供给客户端。Asy
cCallback引用的事件处理程序包含完成客户端异步任务的程序逻辑。在通信中,Asy
cCallback中的封装你要回调的函数,state则是相当于回调函数的参数。(IAsy
cResult类型)c属性:RemoteE
dPoi
t获取远程的IP地址和端口LocalE
dPoi
t获取本地的IP地址和端口
33、Csharp的异步Socket与同步Socket的主要区别:
服务端为B客户端为A1、假设(Socket同步的情况下)服务端B和客户端A已经三次握手,建立了链接。A和B之间已经可以进行通信。假如B端在请求A端的时候请求成功就发送一条数据。那么A端就可以直接拿Socket对象得到他的信息。但是假如B端并没有在连接成功后直接发送信息而是在后来不确定的时间内发送的信息。那么A端就无法得到这条信息。通常情况下:一个定时器去不断扫描这个数据缓存区。但是效率低下。
f所以Socket同步只适合在短时间通讯,不适合长期通讯。2、那么如何解决这个问题呢这里就需要用到我们的异步传输,异步传输的原理:在A端得到这个Socket对象以后并不是直接去接收数据而是建立一个回调函数,回调函数由系统维护的。他在指定的时间自动去扫描数据存储区。假如有数据他就把数据存储到指定的字节数组中。
总结:
短时间一次连接发送数据交互信息的,适合用于同步。长时间连接发送数据交互信息的,适合用于异步。执行过程Socket:Browser首先向Server发送请求,在同步时Browser就会阻塞,一直等待Server的响应,在等待的过程中Browser什么也干不成,这可能会引起Browser卡死等问题,而且效率低下。解决方法就是通过新建一个线程,让这个线程去监听等待响应,从而将Browser从阻塞中解救出来,去处理其他的事情。按照我个人的理解,同步(阻塞)多线程就是异步了。因为按照以上的说法,系统维护的回调函数实现的就是我们这里的新建的线程完成的功能。说白了,同步就是自己去监听等待响应,异步是将监听等待响应的工作交给了其他的线程。以下程序代码只能作为Socket局域网通信的基础。
331、Socket同步代码实现:
1、SocketServer(服务端代码实现)
usi
gSystemusi
gSystemCollectio
sGe
ericusi
gSystemLi
qusi
gSystemTextusi
gSystemThreadi
gTasksusi
gSystemNetSocketsusi
gr