0

この質問はすでに行われていることは知っていますが、その人に与えられた答えは、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接続のリセット

助けが必要です!

4

1 に答える 1

0

問題を解決しました... Wireshark を使用して、サーバーと GPS の間のパッケージを確認しました。そのため、Wireshark の「win」パラメータのサイズが両方のストリームで異なっていることに気付きました。GPS から => 勝利 = 10880、サーバーから => 勝利 = 8019。サーバーの勝利要素を変更しただけで機能しました!!!!

于 2012-07-30T21:53:32.617 に答える