この質問はすでに行われていることは知っていますが、その人に与えられた答えは、EOFまでread()を使用することでした。この回答を適用しても、サーバーは「接続リセット」を送信します。問題に慣れていない人のために、車に取り付けられているGPSをサーバーに接続しようとしています。SMSおよびGPRSコマンドで動作するため、デバイスを正常に接続することが目的です。コードは次のとおりです。
これが私のクライアントソケットマネージャーです
package tcp.clientservermodel;
import java.net.*;
import java.io.*;
public class ClientSocketManager extends Thread{
Socket client_socket_;
InputStream input_;
OutputStream output_;
ClientSocketCaller caller_;
public ClientSocketManager( ClientSocketCaller caller,Socket incoming_socket){
this.caller_=caller;
this.client_socket_=incoming_socket;
this.start();
}
public void run(){
try{
input_=this.client_socket_.getInputStream();
output_=this.client_socket_.getOutputStream();
int incoming_char=0;
StringBuffer incoming_message=new StringBuffer();
while((incoming_char=input_.read())!=-1){
// System.out.println(incoming_message.toString());
if(incoming_char=='\n'){ ProcessMessage(this. client_socket_.getInetAddress().toString()+": "+incoming_message.toString());
incoming_message=new StringBuffer();
}else{
incoming_message.append((char)incoming_char);
}
}
}catch(Exception err){
}
}
public boolean SendMessage(String message){
boolean success=true;
try{
this.output_.write(("123456G").getBytes());
}catch(Exception err){
success=false;
}
return success;
}
public void ProcessMessage(String message){
System.out.println(message);
caller_.MessageHasBeenRecieved(message);
}
}
サーバーソケットマネージャー:
package tcp.clientservermodel;
import java.net.*;
import java.io.*;
import java.util.*;
public class ServerSocketManager extends Thread
implements ClientSocketCaller{
int port_;
ServerSocket server_socket_;
public boolean is_enabled_=true;
Vector client_sockets_vector_=new Vector();
public ServerSocketManager(int port){
this.port_=port;
this.start();
}
public void run(){
try{
this.server_socket_=new ServerSocket(port_);
while(is_enabled_){
Socket client_socket=this.server_socket_.accept();
System.out.println("Connection Succesful "+client_socket.getInetAddress().toString());
this.client_sockets_vector_.add(new ClientSocketManager(this,client_socket));
}
}catch(Exception err){
System.out.println(err +" 3");
}
}
public void MessageHasBeenRecieved(String message) {
for(int i=0;i<this.client_sockets_vector_.size();i++){
ClientSocketManager current=(ClientSocketManager)this.client_sockets_vector_.get(i);
if(current!=null){
current.SendMessage(message);
}
}
}
}
これがクライアントソケットキャラーです
package tcp.clientservermodel;
public interface ClientSocketCaller {
public void MessageHasBeenRecieved(String message);
}
エラーはこの行にあります
(incoming_char = input_.read())!=-1
出力は
java.net.SocketException接続のリセット
助けが必要です!