簡體   English   中英

客戶端不向服務器發送數據

[英]Client does not send data to server

即使使用此非常基本的客戶端服務器應用程序,我也遇到問題。 客戶端未發送數據/服務器未接收。 我不明白問題出在哪里。 我什至開始認為我對套接字一無所知。

這是服務器代碼:

public class Server
{
public static void main(String args[])
{
    try{
        ServerSocket serverSocket = new ServerSocket(3000);

        Socket socket = serverSocket.accept();

        System.out.println("Client connected: "+socket.getInetAddress.toString());

        Scanner scanner = new Scanner(socket.getInputStream());

        while(true)
        {
            System.out.println(scanner.nextLine());
        }
    }catch(IOException e)
    {
        System.out.println("error");
    }
}
}

這是客戶端代碼:

public class Client
{
public static void main(String args[])
{
    Socket socket;
    PrintWriter printWriter;


    try {
        socket = new Socket("127.0.0.1", 3000);
        printWriter = new PrintWriter(socket.getOutputStream(), true);

        while(true)
        {
            printWriter.write("frejwnnnnnnnnnnnnnnnnnnnnnnnnosfmxdawehtcielwhctowhg,vort,hyvorjtv,h");
            printWriter.flush();
        }

    }catch(IOException e)
    {
        System.out.print("error\n");
    }

}
}

如果我都在同一台計算機上運行,​​則服務器正確打印“客戶端已連接.....”,但隨后不再打印。

問題是什么?

服務器讀取下一 客戶端不發送任何行尾。 因此,服務器可能無法知道該行應該結束,並阻塞直到在流中找到EOL為止。 或直到客戶端關閉其套接字。

在客戶端代碼中,您可以使用PrintWriter裝飾輸出流,以便可以使用println 更換

printWriter.write("frejwnnnnn...rjtv,h");
printWriter.flush();

通過:

printWriter.println("frejwnnnnn...rjtv,h");

沖洗是沒有用的,因為有請求自動沖洗(在PrintWriter構造函數中為true)。

在服務器代碼中,可以使用BuffererdReader裝飾器代替Scanner:

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine;
while ((inputLine = br.readLine()) != null) {
    System.out.println(inputLine);
}

暫無
暫無

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

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