2014-08-27 130 views
0

單個客戶端連接到單個服務器。 我無法顯示從客戶端發送的文本。 我是不是從客戶端正確發送文本,或者沒有在服務器上正確接收文本? 是否有另一種方法來檢查代碼? (在客戶端數據已發送)或(在服務器端數據已收到) package com.company; import java.io. *; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Iterator; import java.util.Random;無法在服務器端接收數據(Java Socket編程)

public class ChatServer { 
public static void main(String[] args) throws IOException { 

    ChatServer chatServer = new ChatServer(); 
    chatServer.go(); 
} 

private void go() throws IOException { 

    //Generate a random number and write to a text file 

    Random randomGenerator = new Random(); 
    int randomInt = 1024 + randomGenerator.nextInt(64511); 
    PrintWriter printWriter = new PrintWriter("port.txt"); 
    printWriter.write(String.valueOf(randomInt)); 
    printWriter.flush(); 

    //Create Server on a port using that random number 
    ServerSocket serverSocket = new ServerSocket(randomInt); 
    System.out.println("Server on Port: "+randomInt); 

    //Start Accepting Clients 
    ClientHandler clientHandler= new ClientHandler(serverSocket); 
    Thread t = new Thread(clientHandler); 
    t.start(); 

} 

private class ClientHandler implements Runnable { 

    ServerSocket serverSocket; 
    BufferedReader bufferedReader; 
    PrintWriter writer; 
    Socket socket; 

    public ClientHandler(ServerSocket sSocket) throws IOException { 

     serverSocket = sSocket; 
    } 


    public void run() { 

     while (true) 
     { 
      String message; 

      try { 
       //Accept A connection and assign a socket for this client 
       socket = serverSocket.accept(); 
       System.out.println("Connection Established"); 

       //Read Message 
       InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream()); 
       bufferedReader = new BufferedReader(inputStreamReader); 

       while((message = bufferedReader.readLine()) != null) 
       { 

        //Display it on the console 
        System.out.println("From Client: " + message); 

        //Send it back to the client 
        writer = new PrintWriter(socket.getOutputStream()); 
        writer.println("Your message is: " + message); 
        writer.flush(); 

        //Send your message 
        writer.write("This is default message"); 
        writer.flush(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 

}

這是客戶端代碼

package com.company; 


import java.io.*; 
import java.net.Socket; 
import java.util.Scanner; 

public class ChatClient { 
Socket socket; 

public static void main(String[] args) throws IOException { 

    ChatClient chatClient = new ChatClient(); 
    chatClient.go(); 
} 

private void go() throws IOException { 

    //Read Port number from file 
    FileReader fileReader = new FileReader("port.txt"); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 
    int port = Integer.parseInt(bufferedReader.readLine()); 

    //Connect to socket on the port number 
    System.out.println("Connecting to Server on: "+port); 
    socket = new Socket("127.0.0.1",port); 

    //Initiate sender thread 
    ChatSender chatSender = new ChatSender(socket); 
    Thread sender = new Thread(chatSender); 

    //Initiate receiver thread 
    ChatReceiver chatReceiver = new ChatReceiver(socket); 
    Thread receiver = new Thread(chatReceiver); 

    sender.start(); 
    receiver.start(); 
} 

public class ChatSender implements Runnable 
{ 
    BufferedWriter bufferedWriter; 

    public ChatSender(Socket socket) throws IOException { 

     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); 
     bufferedWriter = new BufferedWriter(outputStreamWriter); 

    } 

    public void run() 
    { 
     while (true) 
     { 
      //get text from console 
      Scanner scanner = new Scanner(System.in); 
      String input = scanner.nextLine(); 
      System.out.println("To Server: "+input); 
      try { 
       System.out.println("Sending data"); 
       //write to server 
       bufferedWriter.write(input); 

       //flush the text 
       bufferedWriter.flush(); 
       System.out.println("sent data"); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
} 

public class ChatReceiver implements Runnable 
{ 

    BufferedReader bufferedReader; 

    public ChatReceiver(Socket socket) throws IOException { 

     InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream()); 
     bufferedReader = new BufferedReader(inputStreamReader); 
    } 

    public void run() 
    { 
     try { 
      while (true) 
      { 
       Thread.sleep(1000); 
       System.out.println("Receiving data"); 
       String output = bufferedReader.readLine(); 
       System.out.print("From Server: "+output); 
       System.out.println("Received data"); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

回答

1

常見問題。您正在閱讀線路,但您並未發送線路。將write()更改爲println()。

相關問題