2013-04-18 51 views
0

我有一个应用程序(SWT),我需要在服务器端管理一个文件。通过管理我的意思是3件事情,写入内容到文件中,应用读写锁定机制和显示相同在TextArea。我需要创建一个多线程服务器来实现这一点,因为我的应用程序(实际上是基于eclipse的插件)接受多个用户。我不熟悉这种客户端服务器和套接字编程,我已经阅读了几个教程,但仍未找到任何最佳解决方案。我不需要代码(互联网上有很多),我需要的方式或步骤来做到这一点。 谢谢。JAVA中的文件管理服务器

此外,我发现一些服务器代码,实际上工作正常。但是不显示所需的结果。

我想要用这个文件做的事情是维护作者的名字。 SVN在服务器端做的版本号和相关目标。

服务器程序:

public void onServer() throws Exception { 
     String sentByClient; 
     String line1 = null; 
     ServerSocket socket = new ServerSocket(6789); 
     while(true) { 

    System.out.println("Listening..."); 
     Socket connectionSocket = socket.accept(); 
     BufferedReader inFromClient = 
     new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
     sentByClient = inFromClient.readLine(); 

     System.out.println("Received: " + sentByClient); 

     File file=new File("HistoryFile.txt");//------------------server file 
     BufferedWriter writ=new BufferedWriter(new FileWriter(file)); 
     writ.write(sentByClient); 
     writ.close(); 
     BufferedReader read=new BufferedReader(new FileReader(file)); 

     while((line1=read.readLine())!=null) { 
      System.out.println(line1); 

     } 
     outToClient.writeBytes(line1); 

        } 

    } 

客户端代码:

public void onClient(String param) throws Exception { 
     Socket clientSocket = new Socket("localhost", 6789); 
      DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
      BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      //sentence = inFromUser.readLine(); 
      sentence=param; // Here i'm sending the author name, revision details, etc from svn to my server 
      outToServer.writeBytes(sentence); 
      newSentence = inFromServer.readLine(); 
      System.out.println("FROM SERVER: " + newSentence); 
      historyArea.append(newSentence); 
    } 

我其实需要的是保持服务器上的文件和文本区域(historyArea)显示文件内容。我将历史数据从SVN发送到文件。

期望Ouptut:

Revision Number: 1 
Author: a 
Time:xxxx 
Changed Path:xxxx 
------------------- 
Revision Number: 2 
Author: a 
Time:xxxx 
Changed Path:xxxx 
------------------ 
Revision Number: 3 
Author: a 
Time:xxxx 
Changed Path:xxxx 

Ouptut我得到仅仅是第一次修订:

Revision Number: 1 
    Author: a 
    Time:xxxx 
    Changed Path:xxxx 
+0

在onClient()中,输出'param'并检查你是否确实发送了正确的数据。我认为问题出在调用onClient()的代码中。 – Kishore 2013-04-18 08:45:48

+0

@NandakishoreK是的,可能是这个原因,正如我在代码中提到的那样,它打印服务器发送的数据,输出中没有这样的事情(在客户端),必须重新检查该方法。 – 2013-04-18 09:00:42

回答

0
在这一行

BufferedWriter writ=new BufferedWriter(new FileWriter(file)); 

您打开在写文件

这里模式,因此写入操作将覆盖现有内容。 而是这样做

BufferedWriter writ=new BufferedWriter(new FileWriter(file,true)); 

这将以追加模式打开文件。

+0

感谢您指出,仍然没有解决问题...服务器仍然没有recvng完整的日志details.Only第一次修订显示 – 2013-04-18 07:48:37