我最近被要求爲我工作的公司做一個android應用程序。我的經驗主要集中在Ruby/C++/C#上,所以使用Java進行編程(儘管它是熟悉的sintax)對我來說是一件新事物。Java客戶端/ Ruby服務器套接字連接
我在我的客戶端(Java)上有這種方法,基本上通過套接字建立了一個到Ruby服務器的連接。它發送文本到服務器時工作正常。這裏是服務器和客戶端的代碼。
客戶端(JAVA)
public static void call_socket(String[] cadena)
{
PrintWriter salida;
DataInputStream entrada;
try
{
if(SocketClass.sockethost == "")
{
if(SocketClass.socketport == 0)
{
get_instalacion();
}
}
Socket clientSocket = new Socket();
clientSocket.bind(null);
clientSocket.connect(new InetSocketAddress(SocketClass.sockethost, SocketClass.socketport),30000);
salida = new PrintWriter(clientSocket.getOutputStream(), true);
salida.println(Arrays.toString(cadena));
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("Exception creating new Input/output Streams: " + e);
return;
}
};
服務器(RUBY)現在
require 'socket'
require 'pg'
require 'openssl'
server = TCPServer.new('0.0.0.0',3000)
loop do
Thread.start(server.accept) do |client|
chain= client.gets
chain= chain.delete('[')
chain = chain.delete(']')
chain = chain.gsub(/\s+/, "")
chain = chain.gsub(',', "|")
arr_cade = chain.split("|")
pg_conn = PGconn.connect(:host=> 'localhost', :dbname => 'termventas', :port => 5432, :user => 'postgres', :password=> 'pass')
case arr_cade[1]
when "01"
arr_cade[2] = arr_cade[2].gsub(/\s+/, "")
arr_cade[2]= arr_cade[2].upcase
arr_cade[3] = arr_cade[3].upcase
result = pg_conn.exec("SELECT entrada, clave_venta FROM terminales_usuarios
WHERE entrada = '#{arr_cade[2]}'
AND clave_venta = '#{arr_cade[3]}'")
if result.count == 0 || result == nil
puts "Empty"
else
client.puts "Welcome"
end
end
pg_conn.PGconn.close()
client.close
end
end
,正如我所說的,一切正常,當涉及到向服務器發送一個請求,即時通訊能夠發送正確的字符串[]並在套接字服務器上正確評估它。現在即時嘗試實現從客戶端的服務器獲取輸入。我做了一些研究,這基本上就是我發現的需求,以捕捉由服務器產生的輸入來完成:
BufferedReader server_input= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String answer_back= server_input.readLine();
Log.v("Response", answer_back);
但是,如果我這樣做,它提示我要麼添加一個throw聲明或用try/catch包圍它。我繼續添加try/catch並編譯我的代碼。
在我執行觸發它掛起的套接字連接的動作後,接下來會發生什麼。該應用程序不會崩潰或任何東西,套接字根本不響應(既不發送/接收)。我真的不知道這是什麼原因造成的。如果我刪除涉及捕獲和顯示服務器返回的字符串的句子,一切工作正常。
任何想法?
順便說一句,即時通訊使用Eclipse,也使用模擬器,以及模擬我的Android設備。
我不知道這是否會工作。寫完後請嘗試''client.close_write''。 – rejin 2014-09-26 05:37:13