# coding: utf-8 require 'socket' require 'ebs_packet' include Socket::Constants HOST = "219.240.12.254" CTL_PORT = 5056 DATA_PORT = 5057 def sending_packet(sock, sym) # unsigned char 로 변환하여 packet를 만듦 packet = PACKET[sym].pack("c" * 288) puts "sending packet#{sym.to_s}.... " sock.write packet end def read_socket(sock) begin puts "The server said, '#{sock.readbyte}'" rescue SystemCallError end end @socket = Socket.new(AF_INET, SOCK_STREAM, 0) sockaddr = Socket.pack_sockaddr_in(CTL_PORT, HOST) puts "Starting connect...." @socket.connect(sockaddr) sending_packet(@socket, :_0) read_socket(@socket) sending_packet(@socket, :_1) read_socket(@socket) sending_packet(@socket, :_2) read_socket(@socket) # 이부분에서 DATA_PORT 열어서 받는다. Thread.new do socket2 = Socket.new(AF_INET, SOCK_STREAM, 0) sockaddr2 = Socket.pack_sockaddr_in(DATA_PORT, HOST) socket2.connect(sockaddr2) # ??? memcpy(packet_r+20, req_tok1, 4); p PACKET[:_R][20] = 0 p PACKET[:_R][21] = 0 p PACKET[:_R][22] = 0 p PACKET[:_R][23] = 0 sending_packet(socket2, :_R) read_socket(socket2) begin sleep(1) puts "Get MP3 Preamble" bytes = socket2.read_nonblock(32) end while bytes.length == 32 begin puts "WHILE 2" # sleep(1) bytes2 = socket2.read_nonblock(32) end while bytes2.length == 32 end while true sending_packet(@socket, :_0) read_socket(@socket) sending_packet(@socket, :_3) read_socket(@socket) # read_socket(@socket) sleep(3) end @socket.close puts "connection closed"