0
我在java中有一個sendMessage函數,看起來像這樣。它目前作爲靜態方法可以被任何線程操作(例如HTTP請求)調用。但是,如果我要同時發送兩個請求,則其中一個sendMessage請求會引發「連接重置」。
我需要知道我目前的端口和ip正在使用!這樣我就不會重置連接,而是等待它再次變爲可用。有沒有辦法?
private static String sendMessage(int command,String data,int port,String ip){
try{
String sendString=Integer.toString(command)+":"+data+'$'+'\n';
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket();
InetAddress addr = InetAddress.getByName(ip);
SocketAddress sockaddr = new InetSocketAddress(addr, port);
clientSocket.connect(sockaddr, 20000);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outToServer.writeBytes(sendString);
String rcvString = inFromServer.readLine();
System.out.println("FROM DEVICE: " + rcvString);
clientSocket.close();
return rcvString;
}catch(Exception e){
System.err.println(e.getMessage());
}
return NULL;
}
我不認爲你有你的客戶端代碼有問題。相反,我懷疑你沒有爲服務器端的每個連接創建線程。 –
使你的方法'同步'爲'私有同步靜態字符串sendMessage' – 2013-07-07 13:51:30
那會做什麼?好的,我正在使用servlet。所以每個servlet請求都是根據jetty doc在它自己的線程中處理的。 – raaj