socket(poll)

2024-06-12 05:12
文章标签 socket poll

本文主要是介绍socket(poll),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 什么是Poll
    比 起 异 步 程 序 , 同 步 程 序 更 简 单 明 了, 而 且 不 会 引 发 线 程 问 题 。
i f (socket 有可读数据){
socket. Receive ( )
i f (socket 缓冲区可写了 socket.Send()
)
i f (socket 发生程序 ), 错误处理
}

只要在阻塞方法前加上一层判断,有数据可读才调用Receive,有数据 可写才调用 Send,那不就既能够实现功能, 又不会卡住程序了么?可能有人会在心里感叹, 这样的好

微软当然很早就想到了这个解决方法,于是给Socket 类提供了Poll方法,它的原型如下:

public bool Pollint microSeconds, SelectMode mode
)

Poll 的参数说明

参数说明
microSeconds等待回应的时间,以微秒为单位,如果该参数为- 1,表示一直等待,如果为0,表示非阻塞
mode有3种可选的模式, 分别如下: SelectRead : 如果 Socket 可读 (可以接收数据), 返回true , 否则返回false ; Select Write: 如果Socket 可写, 返回true, 否则返回false; SelectError: 如果 连接失败, 返回 true , 否则返回 false

Poll 方法将会检查Socket的状态。如果指定mode 参数为SelectMode.SelectRead,则 可 确定Socket
是否为 可读;指定参数为Select Mode.SelectWrite,可确定Socket 是否为可 写 ; 指 定 参 数 为 SelectMode.SelectError , 可以检测错误条件 。 Pol l将在
指定的时段 (以微秒为单位)内阻止执行,如果希望无限期地等待响应, 可将microSeconds设置为一个负整
数; 如果希望不阻塞, 可将microSeconds设置为0。

  1. Poll客户端
    卡住客户端的最大“罪犯〞就是阻塞Receive 方法,如果能在Update里面不停地判断 有 没 有 数 据 可 读 , 如 果 有 数 据 可读 才 调 用 Receive , 那不就解决问 题了么 ? 代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using UnityEngine.UI;
using System.Threading;
using System;public class Echo : MonoBehaviour
{//定义套接字Socket socket;//UGUIpublic InputField InputField;public Text text;//接收缓冲区byte[] readBuff = new byte[1024];string recvStr = "";//点击连接按钮public void Connection(){//Socketsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//Connect 这个是同步方法socket.Connect(

这篇关于socket(poll)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053292

相关文章

C++ I/O多路复用 select / poll / epoll

I/O多路复用:在网络I/O中,用 1个或1组线程 管理 多个连接描述符。             如果有至少一个描述符准备就绪,就处理对应的事件             如果没有,就会被阻塞,让出CPU给其他应用程序运行,直到有准备就绪的描述符 或 超时

Java Socket服务器端与客户端的编程步骤总结

一,InetAddress类: InetAddress类没有构造方法,所以不能直接new出一个对象; 可以通过InetAddress类的静态方法获得InetAddress的对象; InetAddress.getLocalHost(); InetAddress.getByName(""); 类主要方法: String - address.getHostName(); String - addre

VC环境下window网络程序:UDP Socket程序

最近在学Windows网络编程,正好在做UDPsocket的程序,贴上来: 服务器框架函数:              socket();    bind();    recfrom();  sendto();  closesocket(); 客户机框架函数:            socket();      recfrom();  sendto();  closesocket();

select、poll、epoll的区别

select、poll、epoll均为linux中的多路复用技术。3种技术出现的顺序是select、poll、epoll,3个版本反应了多路复用技术的迭代过程。我们现在开发网络应用时, 一般都会使用多路复用,很少有用一个线程来监听一个fd的,其中epoll又是最常使用的。关于epoll的实现和常见问题可以参考epoll实现原理和常见问题总结。 当我们在使用epoll的时候,会想当然的认为这种技术

socket()接口与内核协议栈的挂接

最近在看Brdige的代码,发现一个问题,同样的调用ioctl接口实现添加网桥、删除网桥、网桥增加网卡、网桥删除网卡等操作,一个应用层的接口,却通过两条路径实现,sock_ioctl和RTNETLINK(这本就不是一个级别的东西),而应用层的brctl-utils源码中并没有直接使用PF_NETLINK协议簇的情况,让我感到非常奇怪,因此想把glibc到系统调用,到协议簇注册,以及和VFS的关系再

linux下的Socket网络编程教程

套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。

socket函数接收发送详解

http://blog.csdn.net/g_brightboy/article/details/12854117 http://blog.csdn.net/liangkaiyang/article/details/5931901 send。。。 这里只描述同步Socket的send函数的执行流程。 当调用该函数时,send先比较待发送数据的长度

linux下socket常用函数

1、setprotoent(打开网络协议的数据文件) 相关函数  getprotobyname, getprotobynumber, endprotoent 表头文件  #include <netdb.h> 定义函数  void setprotoent (int stayopen); 函数说明      setprotoent()用来打开/etc/protocols,如果参数

select poll epoll之间的区别比较

select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核

udp网络通信 socket

套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性,端口可以标定进程在主机的唯一性,那么socket通过IP+端口号就可以让两个在全网唯一标定的进程进行通信。 套接字有三种: 域间套接字:实现主机内部的进程通信的编程 原始套接字:使用网络层或者数据链路层的接口进行编程,更难更底层,例如制作抓包等网络工具 网络套接字:实现用户通信的编程 udp网络通信 服务端server 分