Module: CNNTActionHelper

Includes:
Socket::Constants
Defined in:
lib/action/module/cnnt_action.rb

Instance Method Summary collapse

Instance Method Details

#cnnt_close(socket) ⇒ Object

关闭连接 用于长连接操作

参数

socket 用于操作的socket句柄

Example

cnnt_close socket



51
52
53
# File 'lib/action/module/cnnt_action.rb', line 51

def cnnt_close socket
  socket.close
end

#cnnt_connect(ip, port) ⇒ Object

建立连接 用于长连接操作

参数

  • ip

  • port

返回

socekt 句柄

Example:

socket = cnnt_connect 127.0.0.1, 1900



22
23
24
25
26
27
# File 'lib/action/module/cnnt_action.rb', line 22

def cnnt_connect ip, port
  socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
  sockaddr = Socket.pack_sockaddr_in( port, ip )
  socket.connect( sockaddr )
  return socket
end

#cnnt_create_practical_server(port, cont) ⇒ Object

创建一个server 接收到的数据被放到cont数组中

该函数仅支持一个线程的连接请求

参数

port 端口cont 接收数据用的数组

返回

服务器线程句柄

Example

cont=[] cnnt_create_practical_server 1999, cont cnnt_direct_send “127.0.0.1”, 1999, “dddd” p cont



127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/action/module/cnnt_action.rb', line 127

def cnnt_create_practical_server port, cont
  svr_t = Thread.new {
    socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
            sockaddr = Socket.pack_sockaddr_in( port, 'localhost' )
     socket.bind( sockaddr )
            socket.listen( 5 )
            client, client_sockaddr = socket.accept
    loop do
      cont << client.recvfrom(1024)[0]
    end
            socket.close
  }
  return svr_t
end

#cnnt_create_server(port) ⇒ Object

}



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/action/module/cnnt_action.rb', line 93

def cnnt_create_server port
  svr_t = Thread.new {
    socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
            sockaddr = Socket.pack_sockaddr_in( port, 'localhost' )
     socket.bind( sockaddr )
            socket.listen( 5 )
    loop do
              client, client_sockaddr = socket.accept
      Thread.new{
        loop do
          yield client
        end
      }
    end
            socket.close
  }
  return svr_t
end

#cnnt_direct_send(ip, port, cont) ⇒ Object

发送一次数据 用于短连接操作

参数

ip ip port 端口cont 要发送的内容

返回

发送的数据长度

Example

cnnt_short_send “127.0.0.1”, 1900, “dddd”



67
68
69
70
71
72
73
74
# File 'lib/action/module/cnnt_action.rb', line 67

def cnnt_direct_send ip, port, cont
  socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
          sockaddr = Socket.pack_sockaddr_in( port, ip )
          socket.connect( sockaddr )
  ret = socket.send cont, 0
          socket.close
  return ret
end

#cnnt_send(socket, cont) ⇒ Object

发送数据 用于长连接操作

参数

socket 用于发送的socket句柄cont 发送的内容

返回

发送的数据长度

Example

cnnt_send socket, “dddd”



40
41
42
# File 'lib/action/module/cnnt_action.rb', line 40

def cnnt_send socket, cont
  socket.send cont, 0
end

#cnnt_stop_server(svr) ⇒ Object

停止服务线程

参数

svr 服务器线程句柄

Example

cnnt_stop_server svr



149
150
151
# File 'lib/action/module/cnnt_action.rb', line 149

def cnnt_stop_server svr
  svr.exit
end