【发布时间】:2013-07-07 13:45:13
【问题描述】:
美好的一天,
我在 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;
}
【问题讨论】:
-
我认为您的客户端代码没有问题。相反,我怀疑您没有为服务器端的每个连接创建线程。
-
将您的方法
synchronized设为private synchronized static String sendMessage -
那会做什么?好的,我正在使用 servlet。所以每个 servlet 请求都根据 jetty doc 在它自己的线程中处理。
-
那不起作用..它弄乱了我的 TCP 数据
标签: java rest tcp connection