簡體   English   中英

Java Socket服務器未從客戶端套接字接收數據

[英]Java Socket server not recieving data from client socket

嗨,我有一個服務器套接字,它偵聽來自客戶機套接字的請求,而我的代碼似乎沒有從客戶機套接字發送的數據上從其輸入流中檢索數據。

下面是偵聽連接並處理請求的服務器套接字代碼

  public void startlistener() {
serverSocket = new ServerSocket(PORT);
            listening = true;
            thread.start();
            Log.print(TAG, "startlistener");

        }

        public void stopListener() {
            thread.stop();
            listening = false;
            Log.print(TAG, "stopListener");
        }

    public void run() {
                while (listening) {
                    try {

                        Log.d(TAG, "inside server listener loop");
                        Socket accept = serverSocket.accept();

                        String data = getData(accept);

                        httpHandler.handleRequest(data, accept);

                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

    private String getData(Socket socket) throws IOException {
            InputStream in = socket.getInputStream();
            Log.print(TAG, "getData");
            int c = 0;

            StringBuffer buffer = new StringBuffer();
    //goes as far as here and then freezes/doesnt retrieve anything from the input stream
            while ((c = in.read()) != -1) {
                buffer.append((char) c);
            }
            return buffer.toString();

        }

這是我的測試用例

private static final String HTTP_REQUEST = "HTTP/1.0 408 Request Time-out"
        + newLine + "Cache-Control: no-cache" + newLine
        + "Connection: close" + newLine + "Content-Type: text/html";

public void testSocketConnection() {

        try {
            httpProxy = new HttpProxy(testHttpHandler);
            httpProxy.startlistener();
            testSocket = new Socket("localhost", HttpProxy.PORT);
            OutputStream outputStream = testSocket.getOutputStream();
            InputStream inputStream = testSocket.getInputStream();

            outputStream.write(HTTP_REQUEST.getBytes());
} catch (UnknownHostException e) {
            httpProxy.stopListener();
            e.printStackTrace();
            fail(e.toString());
        } catch (IOException e) {
            httpProxy.stopListener();
            e.printStackTrace();
            fail(e.toString());
        }


}

您的客戶沒有關閉插座。 您的服務器讀取套接字,直到EOS為止,因為您的客戶端沒有關閉套接字,EOS永遠不會到達。

注意:不要在接受線程中處理客戶端I / O。 啟動一個單獨的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM