/*
* main.cc
*
* Created on: 2009-11-30
* Author: liheyuan
* Describe: 阻塞模式服务器(Echo服务器)
*
* Last Date: 2009-11-30
* CopyRight: 2009 @ ICT LiHeyuan
*/
#include <iostream>
using namespace std;
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVER_PORT 18000
#define SERVER_QUEUE 10
#define MAX_BUF 16
int main() {
//设置服务器Addr,在18000,任意IP监听
int serverFd;
serverFd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serverAddr;
socklen_t serverAddrLen = sizeof(sockaddr_in);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(SERVER_PORT);
//绑定
if (bind(serverFd, (sockaddr*) &serverAddr, serverAddrLen)) {
cout << "Binding on " << SERVER_PORT << " fail." << endl;
return -1;
}
//创建等待队列
listen(serverFd, SERVER_QUEUE);
//阻塞模式等待客户连接
struct sockaddr_in clientAddr;
int clientFd;
socklen_t clientAddrLen;
int len;
char buf[MAX_BUF];
while (1) {
clientFd = accept(serverFd, (struct sockaddr*) &clientAddr,
&clientAddrLen);
cout << inet_ntoa(clientAddr.sin_addr) << " connect" << endl;
while ((len = read(clientFd, buf, MAX_BUF)) > 0) {
write(clientFd,buf,len);
}
}
close(serverFd);
}
转自: http://www.coder4.com/archives/128
分享到:
相关推荐
首先,我们需要打开一个监听套接字,设置其为非阻塞模式,并将其添加到`select`调用的可读集合中。当`select`返回时,表示监听套接字上有新的连接请求,我们可以接受这个连接并将新建立的套接字添加到可读集合中。 ...
总结来说,EchoServer回射服务器是一个使用C++和epoll技术实现的高性能服务器,它应用了代理模式来处理客户端的连接和数据交换。epoll提供了高效处理并发连接的能力,而代理模式则使得代码结构更加清晰,便于维护。...
4. **tcp_echo_fsm**: 这是处理客户端连接的有限状态机,它实现了echo服务器功能,即接收到客户端的任何数据后,都会原样返回。这对于演示目的非常合适,但在实际应用中,gen_fsm可以处理更复杂的交互逻辑。 为了...
这种非阻塞模式的网络编程,可以显著提高服务器处理大量并发连接的能力,因为不需要为每个连接创建单独的线程,从而减少了系统资源的消耗,提高了整体性能。 ### 结论 综上所述,Java网络编程中的非阻塞与阻塞编程...
通过对`EchoServer.java`、`SocketUtils.java`和`EchoClient.java`的分析,我们可以深入理解Java Socket编程以及多线程阻塞模式在实际应用中的实现。这对于开发网络应用程序,尤其是需要处理大量并发连接的服务端...
2. 监听连接:服务器开启监听,当有新的连接请求时,将新连接的套接字与IOCP关联,并设置为非阻塞模式。 3. 接收数据:客户端发送数据后,服务器会从IOCP中取出完成的接收操作,获取数据并存储。 4. 回显数据:...
Echo服务器是一种简单的网络服务,它接收到客户端发送的数据后,原样返回。在Java中,我们可以使用`ServerSocket`类创建服务器端的套接字,并监听特定端口。当有客户端连接时,`accept()`方法会被阻塞,直到一个新的...
在多线程echo服务器中,每次接收到客户端连接请求时,服务器会创建一个新的线程来处理这个连接,而不是在主线程中处理。这样做可以避免单线程模型中的阻塞问题,使得服务器能够同时处理多个客户端请求,提高并发性能...
3. 数据接收:使用阻塞或非阻塞模式等待接收UDP数据包,通常会有一个循环来持续接收数据。 4. 数据处理:接收到数据后,服务器可能会对数据进行某种处理,例如检查内容或计算校验和。 5. 数据响应:将处理后的数据回...
标题中的“真正无锁IOCP回射服务器(IOCP Tcp EchoServer)”指的是一个使用了I/O完成端口(I/O Completion Port, IOCP)技术的TCP服务器,它实现了回射(Echo)服务,即接收到客户端发送的数据后,原样返回给客户端...
3. **设置为非阻塞模式**:NIO的核心在于非阻塞,因此我们需要将ServerSocketChannel设置为非阻塞模式:`serverSocketChannel.configureBlocking(false)`。 4. **注册选择器**:然后,我们创建一个Selector实例,并...
这个简单的echo服务器示例展示了Swoole的基本用法,但实际应用中,你可以利用Swoole的特性构建更复杂的服务,如聊天室、推送系统或实时数据分析平台。 总的来说,Swoole扩展为PHP开发者提供了一种强大的工具,使得...
在传统的阻塞模式下,服务器在等待数据传输时会暂停执行其他任务。而无阻塞和异步模式则使用事件驱动或回调函数,使得服务器可以同时处理多个连接,提高并发能力。这通常通过I/O多路复用技术如select、poll或epoll...
该接口遵循非阻塞模式,该模式允许应用程序同步或异步通信。 该接口已针对以下平台实现: Linux(投票和epoll) OSX(投票和队列) FreeBSD(投票和队列) Windows 8(重叠的I / O) 该系统的完整文档可在doc/basic...
在"echo"代码示例中,Netty展示了如何实现一个简单的回显服务器,该服务器接收到客户端发送的数据后,会原封不动地将数据返回给客户端。这是一个基础但非常重要的概念,它帮助我们理解网络通信的基本原理,并为构建...
在具体实现上,Redis使用了非阻塞I/O模式,这意味着即使没有数据可读或可写,网络层也不会阻塞,而是立即返回并继续处理其他事件。这种模式大大提高了服务器的并发处理能力。此外,Redis还支持多路复用技术,如epoll...
Nginx Echo Server支持多进程模式,这意味着它可以同时处理多个客户端的请求,提高了测试环境的并发能力。`worker_processes`指令在配置文件中设定服务器的工作进程数,`auto`表示根据CPU核心数量自动分配。通过调整...
本文将深入探讨如何利用IO多路复用来实现一个TCP echo服务器,该服务器运行在Linux环境下。 首先,让我们理解什么是TCP echo服务器。TCP echo服务器是一种简单的网络应用,它的主要任务是接收客户端发送的数据,并...
1. **模型-视图-控制器(MVC)架构**:ECHO2遵循经典的MVC设计模式,将应用程序的数据、展示逻辑和用户交互分开,提高了代码的可读性和可维护性。 2. **组件化开发**:ECHO2提供了丰富的UI组件库,如表格、按钮、...
2. 通道配置:可能包含设置通道为非阻塞模式的函数,以及关闭通道的方法。 3. 数据读写辅助函数:提供便利的读写数据到`ByteBuffer`的工具方法,例如填充数据或从`ByteBuffer`中获取数据。 总的来说,Java NIO在...