`
cloudmail
  • 浏览: 271935 次
  • 来自: 广州
社区版块
存档分类
最新评论

阻塞模式Echo服务器

 
阅读更多

/*
 * 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

 

分享到:
评论

相关推荐

    测试Echo 服务器

    首先,我们需要打开一个监听套接字,设置其为非阻塞模式,并将其添加到`select`调用的可读集合中。当`select`返回时,表示监听套接字上有新的连接请求,我们可以接受这个连接并将新建立的套接字添加到可读集合中。 ...

    EchoServer回射服务器

    总结来说,EchoServer回射服务器是一个使用C++和epoll技术实现的高性能服务器,它应用了代理模式来处理客户端的连接和数据交换。epoll提供了高效处理并发连接的能力,而代理模式则使得代码结构更加清晰,便于维护。...

    使用OTP原理构建一个非阻塞的TCP服务器

    4. **tcp_echo_fsm**: 这是处理客户端连接的有限状态机,它实现了echo服务器功能,即接收到客户端的任何数据后,都会原样返回。这对于演示目的非常合适,但在实际应用中,gen_fsm可以处理更复杂的交互逻辑。 为了...

    java网络编程(非阻塞与阻塞编程)

    这种非阻塞模式的网络编程,可以显著提高服务器处理大量并发连接的能力,因为不需要为每个连接创建单独的线程,从而减少了系统资源的消耗,提高了整体性能。 ### 结论 综上所述,Java网络编程中的非阻塞与阻塞编程...

    Java Socket学习---多线程阻塞

    通过对`EchoServer.java`、`SocketUtils.java`和`EchoClient.java`的分析,我们可以深入理解Java Socket编程以及多线程阻塞模式在实际应用中的实现。这对于开发网络应用程序,尤其是需要处理大量并发连接的服务端...

    IOCP echo server client 服务器+客户端

    2. 监听连接:服务器开启监听,当有新的连接请求时,将新连接的套接字与IOCP关联,并设置为非阻塞模式。 3. 接收数据:客户端发送数据后,服务器会从IOCP中取出完成的接收操作,获取数据并存储。 4. 回显数据:...

    Java Socket学习---单线程阻塞

    Echo服务器是一种简单的网络服务,它接收到客户端发送的数据后,原样返回。在Java中,我们可以使用`ServerSocket`类创建服务器端的套接字,并监听特定端口。当有客户端连接时,`accept()`方法会被阻塞,直到一个新的...

    echoServer(thread版)源代码

    在多线程echo服务器中,每次接收到客户端连接请求时,服务器会创建一个新的线程来处理这个连接,而不是在主线程中处理。这样做可以避免单线程模型中的阻塞问题,使得服务器能够同时处理多个客户端请求,提高并发性能...

    udp_echoserver DP83848网络服务函数库

    3. 数据接收:使用阻塞或非阻塞模式等待接收UDP数据包,通常会有一个循环来持续接收数据。 4. 数据处理:接收到数据后,服务器可能会对数据进行某种处理,例如检查内容或计算校验和。 5. 数据响应:将处理后的数据回...

    真正无锁IOCP回射服务器(IOCP Tcp EchoServer)

    标题中的“真正无锁IOCP回射服务器(IOCP Tcp EchoServer)”指的是一个使用了I/O完成端口(I/O Completion Port, IOCP)技术的TCP服务器,它实现了回射(Echo)服务,即接收到客户端发送的数据后,原样返回给客户端...

    采用NIO实现一个Socket服务器

    3. **设置为非阻塞模式**:NIO的核心在于非阻塞,因此我们需要将ServerSocketChannel设置为非阻塞模式:`serverSocketChannel.configureBlocking(false)`。 4. **注册选择器**:然后,我们创建一个Selector实例,并...

    PHP使用swoole编写简单的echo服务器示例

    这个简单的echo服务器示例展示了Swoole的基本用法,但实际应用中,你可以利用Swoole的特性构建更复杂的服务,如聊天室、推送系统或实时数据分析平台。 总的来说,Swoole扩展为PHP开发者提供了一种强大的工具,使得...

    Learning-Echo:做得好玩。 练习学习无阻塞回声服务器。 一个(不是很)功能的实现。 包括阻塞式多线程实现以及非阻塞式异步回显实现,以便充分了解两者之间的区别

    在传统的阻塞模式下,服务器在等待数据传输时会暂停执行其他任务。而无阻塞和异步模式则使用事件驱动或回调函数,使得服务器可以同时处理多个连接,提高并发能力。这通常通过I/O多路复用技术如select、poll或epoll...

    basic-binary-ipc:BASIC-BINARY-IPC系统提供了一个接口,用于使用IPv4或本地流执行进程间通信。 该接口遵循非阻塞模式,该模式允许应用程序同步或异步通信

    该接口遵循非阻塞模式,该模式允许应用程序同步或异步通信。 该接口已针对以下平台实现: Linux(投票和epoll) OSX(投票和队列) FreeBSD(投票和队列) Windows 8(重叠的I / O) 该系统的完整文档可在doc/basic...

    《Netty实战》中的 echo 代码-netty-echo.zip

    在"echo"代码示例中,Netty展示了如何实现一个简单的回显服务器,该服务器接收到客户端发送的数据后,会原封不动地将数据返回给客户端。这是一个基础但非常重要的概念,它帮助我们理解网络通信的基本原理,并为构建...

    redis网络层echo例子

    在具体实现上,Redis使用了非阻塞I/O模式,这意味着即使没有数据可读或可写,网络层也不会阻塞,而是立即返回并继续处理其他事件。这种模式大大提高了服务器的并发处理能力。此外,Redis还支持多路复用技术,如epoll...

    nginx-echo-server.tar.gz

    Nginx Echo Server支持多进程模式,这意味着它可以同时处理多个客户端的请求,提高了测试环境的并发能力。`worker_processes`指令在配置文件中设定服务器的工作进程数,`auto`表示根据CPU核心数量自动分配。通过调整...

    IO多路复用实现TCPecho

    本文将深入探讨如何利用IO多路复用来实现一个TCP echo服务器,该服务器运行在Linux环境下。 首先,让我们理解什么是TCP echo服务器。TCP echo服务器是一种简单的网络应用,它的主要任务是接收客户端发送的数据,并...

    ECHO2 文件夹--新手使用必须

    1. **模型-视图-控制器(MVC)架构**:ECHO2遵循经典的MVC设计模式,将应用程序的数据、展示逻辑和用户交互分开,提高了代码的可读性和可维护性。 2. **组件化开发**:ECHO2提供了丰富的UI组件库,如表格、按钮、...

    Java Socket学习---nio实现阻塞多线程通信

    2. 通道配置:可能包含设置通道为非阻塞模式的函数,以及关闭通道的方法。 3. 数据读写辅助函数:提供便利的读写数据到`ByteBuffer`的工具方法,例如填充数据或从`ByteBuffer`中获取数据。 总的来说,Java NIO在...

Global site tag (gtag.js) - Google Analytics