SocketClient

輸入java.io.BufferedWriter。
インポートにjava.io.IOException;
輸入java.io.InputStreamを。
インポートにjava.io.OutputStream;
輸入java.io.OutputStreamWriterが、
輸入java.net.InetSocketAddress。
インポートのjava.net.Socket;
輸入はjava.util.ArrayList;
輸入はjava.util.List; 

パブリック クラスSocketClient {
     パブリックソケットソケット= NULL ;
    公共のOutputStreamのOutputStream = nullを公共のOutputStreamWriterのOutputStreamWriter = nullを公共 BufferedWriterのbufferWrite = nullを公共 InputStream InputStreamは= nullを公共 SocketState socketState = SocketState.Closed。
    公共スレッドsocketThread = nullを公共の一覧<文字列> protocolList = 新しいArrayListを();
    プライベート 静的 ブール closeSocket = ; 

    公共 ボイドcloseSocket(){ 
        closeSocket = 
        socketThread = nullを
    }

    公共 ボイドconnectSocket(){ 
        startThread()。
    } 

    公共 ボイドsendProtocolAPI(文字列プロトコル){ 
        protocolList.add(プロトコル)。
    } 

  
    プライベート ボイドstartThread(){
         場合(socketThread == NULL ){ 
            socketThread = 新しいスレッド(){
                 公共 ボイドRecivce(文字列プロトコル){
                     // Protocol.ParseProtocol(プロトコル)。
                }
                 公共 ボイドラン(){
                     バイト[] =バッファ新しい バイト [を'?' ];
                    しばらく){
                         しようと{
                             場合(closeSocket){ 
                                closeSocket = ;
                                してみてください{
                                     場合(!ソケット= ヌル){ 
                                        socket.close(); 
                                    } 
                                } キャッチ(IOExceptionをlocalIOException1){
                                }
                                ソケット socketState){ = nullを
                                OutputStreamを = nullを
                                OutputStreamWriter = nullを
                                inputStream = nullを
                                System.gc(); 
                                socketState = SocketState.Closed。
                                破ります; 
                            } 
                            の場合(SocketState.Connected =!
                                socketState = SocketState.Connecting。 
                                ソケット = 新しいソケット(); 
                                たInetSocketAddress IPA = たInetSocketAddress(Config.IP、Config.Port)。
                                socket.connect(IPA、 500 )。
                                出力ストリーム = socket.getOutputStream()。
                                OutputStreamWriter = 新しいのOutputStreamWriter(OutputStreamの); 
                                bufferWrite = 新しいBufferedWriterの(のOutputStreamWriter)。 
                                InputStreamの = socket.getInputStream(); 
                                socket.setTcpNoDelay()。
                                socket.setKeepAlive(真の); 
                                socketState = SocketState.Connected。
                                Thread.sleep( 1000L )。
                            } 
                            であれば(SocketState.Connected == socketState){
                                 場合(protocolList.size()> 10 ){ 
                                    protocolList.removeAll(protocolList)。
                                }  場合(protocolList.size()> 0){
                                     一方(protocolList.size()> 0 ){ 
                                        bufferWrite.write(protocolList.get( 0 ))。
                                        bufferWrite.flush(); 
                                        protocolList.remove( 0 )。
                                        Config.PaySDKAPI.ReceiveTcpLinkAPI(Config.IP、Config.Port)。
                                    } 
                                } 
                            } 
                        } キャッチ(例外e){ 
                            socketState =SocketState.Closed;
                            試す{ 
                                のThread.sleep( 5000L )。
                            } キャッチ(InterruptedExceptionあるlocalInterruptedException){ 
                            } 
                        } 
                        試みる{
                             場合((のinputStream!= NULL)&&(SocketState.Connected == socketState)){
                                 int型 READSIZE = inputStream.read(バッファ)
                                もし(READSIZE> 0 ){ 
                                    Recivce(新しい文字列(バッファ、0 、READSIZE))。
                                } 
                            } 
                        } キャッチ(IOExceptionを電子){ 
                            socketState = SocketState.Closed。
                        } 
                    } 
                } 
            }。
            socketThread.start(); 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/zclaude/p/11590089.html