首先socket在默认情况下是阻塞状态的,这就使得发送以及接收操作处于阻塞的状态,即调用不会立即返回,而是进入睡眠等待操作完成。 一.发送选用send(这里特指TCP)以及sendto(这里特指UDP)来描述       在阻塞模式下send操作将会等待所有数据均被拷贝到发送缓冲区后才会返回。     如果
转载 2024-01-06 11:38:22
91阅读
在传统的网络编程中我们依赖于ServerSocket,Socket进行通信,大致的框架就是ServerSocket调用accept方法,等待客户端的连接,如果连接进来的时候则创建一个服务器端socket,客户端和服务器端socket建立好InputStream 和outputStream通道进行通信,在这个网络IO的过程中inputStream的read 和outputStream的write方法
转载 2024-01-02 15:26:09
41阅读
 Socket编程可以分为阻塞和非阻塞两种开发模式阻塞模式是指在指定 Socket上调用函数执行操作时,在没有完成操作之前,函数不会立即返 回。例如,服务器程序在阻塞模式下调用 accepto函数等待来自客户端的连接请求时,将会阻塞 服务器线程,直至接收到一个来自客户端的连接请求。默认创建的 Socket阻塞模式  非阻塞模式是指在指定 Socket上调用函数执行操作时,无论
在Linux操作系统中,Socket编程是一种非常常见的网络编程方式,而TCP协议则是其中最常用的一种协议。在进行Socket编程时,经常会遇到阻塞的情况。 所谓阻塞,就是指当程序执行到某个特定的调用或操作时,如果无法继续往下执行,就会暂停在那里,直到满足某个条件才能继续执行。在Socket编程中,TCP连接的建立和数据传输过程中可能会导致阻塞的情况。 对于TCP连接而言,阻塞可能出现在连接建
原创 2024-04-25 09:54:54
123阅读
# Java Socket阻塞接收 TCP 的实现 在网络编程中,JavaSocket 是一个非常重要的工具,尤其是进行 TCP 通信时。然而,在某些情况下,我们希望使用非阻塞方式来接收数据。这一过程可以通过 Java NIO(即非阻塞输入/输出)库来实现。本文将阐述如何实现 Java Socket阻塞 TCP 接收,并提供代码示例。 ## 流程步骤 下面是实现 Java So
原创 10月前
73阅读
基本概念:阻塞IO::socket阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。非阻塞IO::非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。 IO模式设置:一般对于一个socket阻塞模式还是非阻塞模式有两种方式::方法1、fcntl 设置;方法2、recv,send 系列的参数。(读取,发送时,临时将sockfd或filefd设置为
网上的代码大都是官方的例子,不直观、不彻底。 结合网上的东西花了一周的时间。这是一篇socket应用级别的文章,更深入的了解(自己写的):最大视角-从Unix底层 理解 python的io模型、python异步IO、python的select、Unix的select、epollfileno 的本质:可读写文件一图了解 socket原理Python 标准输入输出通常:一些简单的概念结合在一起就变得混
转载 2024-02-29 23:01:14
53阅读
P.S. 阻塞分析从在调用过程中是否采用阻塞的判断逻辑看起就好。socket的结构Socket 使用tcp协议协议使用NET_FAMILY中的AF_INET/PF_INET内核是通过SOCK_STREAM来定位socket的,SOCK_STREAM结构如下:[/net/ipv4/af_inst.c/tatic struct inet_protosw inetsw_array[]] static s
转载 2024-10-12 14:52:43
17阅读
在Linux系统中,网络通信是非常常见的操作。其中,TCP Socket是一种非常重要的通信方式,而非阻塞Socket又是TCP Socket的一种特殊形式。本文将重点介绍在Linux系统中如何使用非阻塞Socket进行网络通信。 首先,我们来了解一下什么是SocketSocket是在计算机网络通信中非常重要的一个概念,它是实现网络通信的一种机制。在Linux系统中,Socket是一种文件描述
原创 2024-04-09 10:21:27
212阅读
# Python Socket TCP 阻塞式 在网络编程中,Socket 是一种在网络中进行通信的基本工具。TCP(Transmission Control Protocol)是一种可靠的、面向连接的协议,它提供了双向的字节流通信。在 Python 中,我们可以使用 Socket 模块来实现 TCP 阻塞式通信。 ## 什么是阻塞式通信 在阻塞式通信中,当程序执行到接收数据的地方时,如果没
原创 2024-04-17 04:28:26
15阅读
一、What网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 Socke
# 如何在 Java 中实现非阻塞TCP Socket 接收 在现代网络编程中,非阻塞 IO(NIO)是一个非常重要的概念。它能够使得程序在执行 IO 操作时不被阻塞,从而可以进行其他任务。这篇文章将指导你如何在 Java 中实现非阻塞TCP socket 接收。 ## 整体流程 以下是实现非阻塞 TCP socket 接收的步骤: | 步骤 | 描述 | |----|------
原创 9月前
39阅读
recv/send堵塞和非堵塞理解TCP之深入浅出send和recv需要理解的3个概念实例详解send()send函数recv函数 参考:TCP之深入浅出send和recvlinux下非阻塞tcp研究题外话今天在看epoll的ET模式时,说ET模式时,套接字描述符必须设置成非堵塞模式,为什么 IO 多路复用要搭配非阻塞 IO? 于是想看看堵塞和非堵塞recv/send的区别,网上鱼龙混杂的博文
最近看了许多关于网络编程的资料,自己小记一下,以方便以后查找。什么是阻塞socket,什么是非阻塞socket。对于这个问题,我们要先弄清什么是阻塞/非阻塞阻塞与非阻塞是对一个文件描述符指定的文件或设备的两种工作方式。 阻塞的意思是指,当试图对该文件描述符进行读写时,如果当时没有东西可读或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。 非阻塞的意思是,当没有东西可读或者不可写时,
转载 2024-04-25 16:19:03
188阅读
将一个socket 设置成 阻塞模式 和 非阻塞模式, 使用fcntl方法,即: 设置成非阻塞模式:先用fcntl的F_GETFL获取flags,用F_SETFL设置flags|O_NONBLOCK;        即:    flags = fcntl(sockfd, F_GETFL, 0);
转载 2024-03-14 16:08:14
164阅读
起先是在Socket编程时,服务端取得客户端发送的数据,但是在InputStream.read()的时候,一直停在那,然后取了解了read方法才知道阻塞问题代码示例://端口数据取得 byte[] b = new byte[1024]; in.read(b);//阻塞地方 String contents = new String(b).trim();//trim去除多余空格,否则,读进来的是byt
转载 2023-08-28 22:25:13
77阅读
NIO 设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式。 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞 与非阻塞 。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止。而对于非阻塞状态,
阻塞模式和非阻塞模式的主要区别在于无请求来到时,阻塞模式会一直停在接收函数即accep函数,直到有请求到来才会继续向下进行处理。而非阻塞模式下,运行接收函数,如果有请求,则会接收请求,如果无请求,会返回一个负值,并继续向下运行。一般来说,使用阻塞模式的程序比较多,因为阻塞模式是由内核保障等待请求的,当他阻塞时不占用系统资源,而非阻塞模式需要我们人工轮询,占用资源较多。另外,阻塞模式可以使用sele
转载 2024-02-14 19:53:29
52阅读
一、阻塞模式       阻塞socket的缺省方式,也是最常用的方式,即调用结果返回之前,函数阻塞,当前线程会挂 起, suspend 。       可能造成阻塞的函数有:connect()、accept()、读写函数、gethostbyname()等。 二、再探 send 和 recv  
## 实现Java阻塞Socket和非阻塞Socket ### 1. 流程图 ```mermaid flowchart TD A(创建Socket) --> B(设置阻塞/非阻塞) B --> C(连接服务器) C --> D(读取/写入数据) D --> E(关闭Socket) ``` ### 2. 代码实现 #### 2.1 创建Socket 要创建一
原创 2023-11-14 09:16:54
228阅读
  • 1
  • 2
  • 3
  • 4
  • 5