2013-03-21 50 views
0

我有一個項目,有一個服務器,創建一個空的文本文件。服務器使一個txt文件和客戶端寫它

一旦我的客戶端停止寫入此文件,服務器應讀取並顯示結果。

我的問題是客戶端連接到服務器,但客戶端發送的任何文本都沒有寫在服務器端。另外,當我退出時,服務器不會退出。

這是我到目前爲止有:

服務器

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.DataInputStream; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.PrintStream; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 

public class Server { 

    public static void main(String args[]) throws IOException { 
     BufferedWriter out;// = new BufferedWriter(new FileWriter("C://Users//Vagos//Desktop//file.txt")); 

     ServerSocket echoServer = null; 
      String line; 
      DataInputStream is; 
      PrintStream os; 
      Socket clientSocket = null; 

    // Try to open a server socket on port 9999 
      try { 
       echoServer = new ServerSocket(55); 
      } 
      catch (IOException e) { 
       System.out.println(e); 
      } 
    // Create a socket object from the ServerSocket to listen and accept 
    // connections. 
    // Open input and output streams 

    try { 
       clientSocket = echoServer.accept(); 
       is = new DataInputStream(clientSocket.getInputStream()); 
       os = new PrintStream(clientSocket.getOutputStream()); 
       out = new BufferedWriter(new FileWriter("C://Users//Vagos//Desktop//file.txt")); 
    // As long as we receive data, echo that data back to the client. 

       while (true) { 
       line = is.readUTF(); 
       os.println(line); 
       os.flush(); 
       out.write(line); 
       out.flush(); 
       } 
      } 
    catch (IOException e) { 
       System.out.println(e); 
      } 
     } 
    } 

這裏是我的客戶:

import java.io.*; 
import java.net.InetAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.Scanner; 

public class client { 

    public static void main(String[] args) { 
     Socket smtpSocket = null; 
     DataOutputStream os = null; 
     DataInputStream is = null; 
     String strout; 
     Scanner in = new Scanner(System.in); 
     try { 
      smtpSocket = new Socket("localhost", 55); 
      os = new DataOutputStream(smtpSocket.getOutputStream()); 
      is = new DataInputStream(smtpSocket.getInputStream()); 
     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host: hostname"); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection to: hostname"); 
     } 

    if (smtpSocket != null && os != null && is != null) { 
      try { 
       do{ 
        System.out.print("Write what the client will send: "); 

       strout = in.nextLine(); 
       os.writeBytes(strout);} 
       while(!strout.equals("exit")); 
       os.close(); 
       is.close(); 
       smtpSocket.close(); 
      } catch (UnknownHostException e) { 
       System.err.println("Trying to connect to unknown host: " + e); 
      } catch (IOException e) { 
       System.err.println("IOException: " + e); 
      } 
     } 
    }   
}; 

回答

0

試試這個。

在您的服務器

// Open input and output streams 

    try { 
     clientSocket = echoServer.accept(); 
     is = new DataInputStream(clientSocket.getInputStream()); 
     InputStreamReader ir = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(ir); 
     os = new PrintStream(clientSocket.getOutputStream()); 
     out = new BufferedWriter(new FileWriter("C://Users//Vagos//Desktop//file.txt")); 
     // As long as we receive data, echo that data back to the client. 

     while (true) { 
      line = br.readLine(); 
      System.out.println(line); 
      os.println(line); 
      os.flush(); 
      if(line != null){ 
      out.write(line + '\n'); 
      out.flush(); 
      } 
     } 
    } 

以及您的客戶端的 '退出' 部分嘗試後更改
while(!strout.equals("exit"));

while(!strout.equalsIgnoreCase("exit"));

希望這有助於!

+0

贊成票,但是當給定的出口是說NUL NUL NUL NUL並沒有停止 – 2013-03-21 12:23:39

+0

@Βίκτοραςανδρεάδης,有什麼說NUL,服務器或客戶端。在你的服務器中還有一個'while(true)'代碼需要改變。你必須結束這個循環,也許你可以這樣做'while(line!= null)' – 2013-03-21 12:30:57

+0

我明天試試它,因爲我不知道..... – 2013-03-21 15:29:55

0

今天我老師上傳一個新項目是因爲他做了一個錯誤,我要做的項目與老客戶正在讀或寫0到911的數字的txt類似,客戶是選擇隨機什麼是讀取或寫入如果選擇讀取顯示TXT的數字如果選擇寫入他隨機寫入一個0-911的數字,如果選擇100則停止。

我做它,但沒有顯示我是堆棧。

服務器

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.DataInputStream; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.PrintStream; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 

public class Server { 

    public static void main(String args[]) throws IOException { 
     BufferedWriter out;// = new BufferedWriter(new FileWriter("C://Users//Vagos//Desktop//file.txt")); 

     ServerSocket echoServer = null; 
      int line; 
      DataInputStream is; 
      PrintStream os; 
      Socket clientSocket = null; 

    // Try to open a server socket on port 9999 
      try { 
       echoServer = new ServerSocket(55); 
      } 
      catch (IOException e) { 
       System.out.println(e); 
      } 
    // Create a socket object from the ServerSocket to listen and accept 
    // connections. 
    // Open input and output streams 

      try { 
       clientSocket = echoServer.accept(); 
       is = new DataInputStream(clientSocket.getInputStream()); 
       InputStreamReader ir = new InputStreamReader(is); 
       BufferedReader br = new BufferedReader(ir); 
       os = new PrintStream(clientSocket.getOutputStream()); 
       out = new BufferedWriter(new FileWriter("C://Users//Vagos//Desktop//file.txt")); 
       // As long as we receive data, echo that data back to the client. 
       boolean ch=true; 
       { 
        line =(Integer) br.read(); 
       // System.out.println(line); 
        os.println(line); 
        os.flush(); 
        out.write(line+"\n"); 
        out.flush(); 
       } while (line != 100); 

       os.close(); 
       out.close(); 
       br.close(); 
       clientSocket.close(); 

      } 
    catch (IOException e) { 
       System.out.println(e); 
      } 
     } 
    } 

客戶

import java.io.*; 
import java.net.InetAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.Random; 
import java.util.Scanner; 

public class client { 

    public static void main(String[] args) throws IOException { 
     Socket smtpSocket = null; 
     DataOutputStream os = null; 
     DataInputStream is = null; 
     String strout; 
     int number=0; 
     Random rand = new Random(System.currentTimeMillis()); 
     Scanner in = new Scanner(System.in); 
     try { 
      smtpSocket = new Socket("localhost", 55); 
      os = new DataOutputStream(smtpSocket.getOutputStream()); 
      is = new DataInputStream(smtpSocket.getInputStream()); 
     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host: localhost"); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection to: localhost"); 
     } 

     int choice=2;//rand.nextInt(2); 
     if(choice==1){ 
      int num=is.read(); 
      System.out.println(num); 

     } 
     else if(choice==2){ 
      try { 
       do{ 
       number=rand.nextInt(911); 
       // System.out.println(number); 
       os.writeInt(number); 
       }while(number!=100); 
       os.close(); 
       is.close(); 
       smtpSocket.close(); 
      } catch (UnknownHostException e) { 
       System.err.println("Trying to connect to unknown host: " + e); 
      } catch (IOException e) { 
       System.err.println("IOException: " + e); 
      } 
     } 
    }   
}