import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;
/**
* 非阻塞的Socket链接。<br>
* 可以在链接建立期间做一些别的操作。
*
* @author 赵学庆,Java世纪网(java2000.net)
*
*/
public class SocketNonBlock {
/**
* 创建一个非阻塞的Socket通道。
*
* @param hostName
* 主机
* @param port
* 端口
* @return Socket端口
* @throws IOException
*/
public static SocketChannel createSocketChannel(String hostName, int port)
throws IOException {
SocketChannel sChannel = SocketChannel.open();
sChannel.configureBlocking(false);
sChannel.connect(new InetSocketAddress(hostName, port));
return sChannel;
}
public static void main(String[] args) {
try {
// 创建链接
SocketChannel sChannel = createSocketChannel("www.java2000.net", 80);
// 可以通过判断是否连接,在链接成功建立前做一些其它的事情
while (!sChannel.finishConnect()) {
System.out.println("waiting....");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(sChannel.isConnected());
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果
waiting....
waiting....
true
分享到:
相关推荐
本文将深入探讨如何使用MFC实现非阻塞Socket通信,并结合protobuf(Protocol Buffers)作为数据交换格式,构建一个允许多个客户端与单一服务器进行通信的系统。 首先,我们来理解“非阻塞Socket”。在传统的阻塞...
在这个"socket多线程例程非阻塞模式"的示例中,我们将深入探讨如何在Windows平台上实现多线程的socket通信,并了解非阻塞模式的工作原理。 首先,让我们来理解Socket的基本概念。Socket是进程间通信(IPC)的一种...
### Socket C++ TCP阻塞与非阻塞服务器客户端开发 #### 概述 本文档将详细介绍如何使用C++ Winsock库来开发TCP非阻塞服务器。通过本篇内容的学习,您将了解到设置socket函数为非阻塞模式的方法,并且能够深入了解...
4. 设置非阻塞模式:在Windows下,可以通过`ioctlsocket()`函数配合`FIONBIO`标志来设置`socket`为非阻塞模式。 5. 异步事件处理:`WSAAsyncSelect()`或`WSAEventSelect()`函数的使用,以及如何根据接收到的事件进行...
在Windows环境下,如使用VC6(Visual C++ 6.0)进行开发,我们可以使用Winsock库来实现非阻塞Socket的超时设置。首先,我们需要包含必要的头文件`winsock2.h`和`ws2tcpip.h`,并链接`ws2_32.lib`库。然后,通过调用`...
《ChatRoom(Winsock).rar:Winsock非阻塞编程详解》 在计算机网络编程领域,Winsock(Windows Socket)是Microsoft Windows操作系统中实现TCP/IP协议族的接口,它为应用程序提供了一种标准的方式来发送和接收网络...
本文将详细解析“最简单的Socket链接”这一主题,包括客户端和服务端的实现以及交互过程。 首先,我们要理解Socket的基本概念。Socket是网络通信中的一个抽象接口,可以看作是两台计算机之间的通信通道。它允许应用...
使用`#include <winsock2.h>`和`#pragma comment(lib, "ws2_32.lib")`来引入所需的头文件和链接库。 2. **初始化和终止**: 在使用Winsock之前,需要调用`WSAStartup`函数初始化Winsock环境,而在程序结束时,调用`...
相反,非阻塞Socket在调用时不等待,无论结果如何都会立即返回。 【TCP通信流程】 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,其通信过程包括以下几个步骤: 1. **服务器端**: ...
异步非阻塞C语言爬虫是一种高效的数据抓取技术,尤其适用于大数据量的网络抓取任务。在本文中,我们将深入探讨这个话题,并详细解释其中涉及的关键技术和概念。 首先,我们来了解一下“异步非阻塞”模式。在传统的...
- **阻塞/非阻塞 (Block/Unblock)**:阻塞式套接字在执行网络调用时会一直等待直至操作完成(例如recv()函数在没有数据时会持续等待直至有数据到达);而非阻塞式套接字无论是否完成都会立即返回结果。 - **常见模式...
在Socket编程中,理解数据包Socket、阻塞的概念以及如何使用select()进行多路同步I/O对于处理多路连接和非阻塞Socket通信也是重要的。select()函数允许程序监控多个Socket,等待它们中的任意一个、多个或者全部变得...
1. **MINA架构**:MINA基于NIO(非阻塞I/O),利用Selector进行多路复用,可以在单个线程中处理多个连接,提高系统效率。 2. **长连接**:与传统的Socket短连接不同,长连接保持在客户端和服务器之间长时间打开,...
- 非阻塞Socket、多路复用I/O(如select、poll或epoll)以及异步Socket(如WSAAsyncSelect或WSAEventSelect)可提升并发性能。 通过理解以上知识点,开发者可以实现Win CE和Windows XP之间的高效、安全的Socket...
- **心跳包**:发送特定的无业务数据包,用于检查网络连接是否正常,防止TCP的“TIME_WAIT”和“FIN_WAIT_2”状态导致的连接阻塞。 - **异常处理**:及时捕获并处理SocketException或其他网络异常,确保连接的健壮性...
9. **性能优化**:对于大量数据传输,可以考虑使用缓冲区优化读写效率,或者使用NIO(非阻塞I/O)提高并发性能。 通过以上步骤和注意事项,我们可以创建出能在Android设备上运行的基于WiFi的Socket客户端和服务器端...
在实际应用中,`InetAddress`和`Socket`经常与其他类结合使用,如`BufferedReader`和`PrintWriter`进行数据读写,或者`SocketChannel`和`Selector`进行非阻塞I/O。这些组合可以帮助我们构建高效、可扩展的网络服务。...
// 获取当前空闲的socket链接 private static Mutex m_mutex = new Mutex(); public static XieGouSocket GetFreeConnection() { m_mutex.WaitOne(); // 先阻塞 for (int i = 0; i < m_socket.Length; i++) { if...
2. **高性能通信**:HPSocket4C基于异步非阻塞I/O模型,通过事件驱动机制,可以处理大量并发连接,实现高吞吐量的网络通信。 3. **协议兼容性**:支持TCP/IP、UDP/Broadcast等多种网络协议,同时还能自定义协议解析...
非阻塞模式下,I/O模型有多种,如Select、WSAAsyncSelect、WSAEventSelect以及IO重叠模型和完成端口模型。其中,完成端口模型被认为是处理高并发的最佳选择。 作者建议,初学者可以从简单的WSAAsyncSelect模型开始...