0 0

ruby的TCPSocket用read/write不能通信,用gets/puts就可以5

server

require 'socket'               
server = TCPServer.open('127.0.0.1',2000)   
             
  client = server.accept      
 
    loop {
   str=client.read
   puts str
   client.write(str)
   
 } 
 client.close  


client

require 'socket'      

host = '127.0.0.1'
port = 2000
msg="\0x48\0x0a\0x0d"
s = TCPSocket.open(host, port)
s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
loop  do 
send = s.write(msg)
s.flush
puts   msg
resp = s.read
puts resp
sleep 1
	end 



按照这上面说的
http://stackoverflow.com/questions/1147852/ruby-tcpsocket-write-doesnt-work-but-puts-does
加上s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) 和flush 也不管用
2012年11月13日 22:21

1个答案 按时间排序 按投票排序

0 0

采纳的答案

client.read 改成 recv(65535) 就OK了。

socket的read和recv函数的区别: http://www.cnblogs.com/heiyue/archive/2011/08/03/2126622.html

2012年11月16日 11:06

相关推荐

    ruby tcp/ip 简单小程序实例

    在Ruby编程语言中,TCP/IP通信是通过内置的Socket库实现的。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而IP(因特网协议)则是网络层协议,负责数据包的路由。这两者结合,形成了...

    web-socket-ruby-master.zip_ruby socket_websock

    在Ruby中,你可以使用`Socket`类来创建TCP或UDP套接字,以便进行客户端-服务器通信。例如,创建一个简单的TCP服务器,你可以这样做: ```ruby require 'socket' server = TCPServer.new(8080) loop do client = ...

    async_tcpsocket:Ruby 的异步 TCP 套接字

    #AsyncTCPSocket ##Ruby 异步 TCP 套接字实现 ###Example require 'async_tcpsocket'socket = AsyncTCPSocket . newsocket . once :error , Proc . new { | err |STDERR . puts "Error: #{ err } "socket . close}...

    ruby-2.3.0

    在开发过程中,如果需要安装Ruby-2.3.0,可以通过Ruby版本管理器(如RVM或rbenv)进行操作,或者直接从Ruby官方网站下载源码编译安装。使用RVM的例子如下: ```bash \curl -sSL https://get.rvm.io | bash -s ...

    Tcl/Tk Moni 串口通信

    3. 使用`puts`和`gets`命令进行数据的发送和接收,`puts $serialPort "Hello, Serial!"`用于发送数据,`set receivedData [gets $serialPort]`用于接收数据。 4. 使用`fileevent`命令监听串口事件,例如`fileevent $...

    ruby初学者教程(对初学者很有帮助)

    - **常量**:大写字母开头的变量,一旦被赋值后就不能再被修改。 #### 四、基本类型 **4.1 Array** 数组是一种有序的数据结构,可以存储多个元素。 ```ruby arr = [1, 2, 3] ``` **4.2 Hash** 哈希是一种键值...

    Hprose ruby 说明文档

    - **服务(Service)**:Hprose 服务是提供远程方法调用的实体,你可以将任何 Ruby 对象注册到服务中,然后其他客户端就可以通过网络调用这些对象的方法。 - **客户端(Client)**:Hprose 客户端负责连接服务端,...

    Ruby-Async是基于nio4r和定时器的Ruby的可组合的异步IO框架

    在Ruby世界中,异步编程可以帮助开发者编写出并发性能更好的应用,尤其在处理大量I/O密集型任务时,如网络通信、文件读写等。下面我们将深入探讨这个框架的核心概念、工作原理以及如何使用它。 一、异步编程与nio4r...

    fgets( )和fputs( )(建议用其完全代替gets和puts函数)

    在C语言中,`fgets()` 和 `fputs()` 是用于处理文本输入输出的函数,相比老式的 `gets()` 和 `puts()`,它们提供了更高级别的安全性和灵活性。下面将详细介绍这两个函数及其与无前缀版本的区别。 ### fgets() 函数 ...

    RUBY 教程.doc

    1. **安装RUBY:** 可以通过官方网站下载最新的RUBY版本进行安装,对于Windows用户来说,推荐使用RubyInstaller进行安装。 2. **环境变量设置:** 安装完成后需要设置环境变量,将RUBY的bin目录添加到系统PATH中,...

    Ruby程序设计(简洁清新的教程)

    ### Ruby程序设计(简洁清新的教程) #### 一、Ruby语言概述 **1.1 Ruby的历史** Ruby语言是由日本人松本行弘(Matsumoto Yukihiro)在1993年开始开发的一种脚本语言。起初,Matsumoto对脚本语言产生了浓厚的兴趣,...

    ruby语法基础教程及Ruby教程中文版和安装文件

    本教程将深入探讨Ruby的基础语法,并介绍如何下载、安装Ruby,以及使用Ruby教程中文版进行学习。 首先,让我们从Ruby的基础语法开始。Ruby支持多种数据类型,包括整数(Integer)、浮点数(Float)、字符串(String...

    Ruby_learning_教程-中文版

    对于Rails开发者来说,学习Ruby不仅能帮助他们理解应用程序代码(包括Rails框架自身的代码),而且还可以更深入地开发Rails应用,熟悉Rails源代码,参与相关讨论,甚至提交bug报告和代码补丁。Ruby也为进行应用程序...

    Ruby-MiniMagickImageMagick或GraphicsMagick命令行的一个ruby封装

    MiniMagick是一个Ruby库,它为使用ImageMagick或GraphicsMagick命令行工具提供了一个方便的接口。这两个工具是强大的图像处理软件,可以执行各种复杂的图像操作,如裁剪、旋转、调整大小、添加边框、应用滤镜等。...

    tcp.rar_TCL tcp_TCP tcl_tcl_tcl/tk_tcp

    2. **数据传输**:一旦建立了连接,可以使用`puts`和`gets`命令进行数据发送和接收。`puts`用于将字符串写入套接字,`gets`则用于从套接字读取一行数据。为了确保可靠的数据交换,通常需要使用循环和条件判断来处理...

    Ruby读写txt文件

    无论是逐行读取、一次性读取,还是写入或追加内容,都只需要几行代码就能实现。同时,通过异常处理和上下文管理,确保了文件操作的健壮性。通过学习和实践这些基本操作,你可以在Ruby项目中更有效地处理文本文件。

    在Ruby中处理文件的输入和输出的教程

    Ruby的IO类在内核(Kernel)模块中实现,派生自IO类的所有I/O方法提供了基本的文件操作功能,包括但不限于:读取(read)、写入(write)、读取一行(gets)、写入一行(puts)、读取一行(readline)、读取单个字符...

    Ruby语言入门教程&代码示例.pdf

    puts "除数不能为 0" return nil else num1 / num2 end end # 主程序 print "请选择运算:\n1.加法\n2.减法\n3.乘法\n4.除法\n" choice = gets.chomp.to_i case choice when 1 print "输入第一个数字:" ...

    ruby programming

    ### Ruby编程语言简介 #### 概述 Ruby是一种面向对象的、动态类型的脚本语言,由日本软件工程师松本行弘(Yukihiro Matsumoto)于1995年设计并开发。Ruby的设计理念是使编程变得简单、有趣且高效。它结合了Perl、...

Global site tag (gtag.js) - Google Analytics