java如何在客户端GUI的JTextArea上显示服务器目录中的数据
我得到了一个小项目,将文件从服务器传输到客户端,该项目按以下顺序执行
- 服务器设置特定目录并连接到客户端李>
- 客户端连接到服务器并扫描该目录李>
- 服务器扫描目录中的所有文件都显示在客户端GUI的文本区域中李>
- 客户端选择文件号,文件从服务器传输到客户端,并存储在客户端的特定目标目录(td)中李>
现在,我有了服务器和客户端的代码,它们工作得很好,但我对JFrames一无所知。我一直在网上搜索并编写代码。 现在的问题是——我希望当我单击客户端GUI上的扫描按钮时,客户端应该连接到服务器,然后扫描特定的服务器目录(由服务器设置),并在客户端GUI的JTextArea中显示文件
这是我的客户代码:
package FTPClient;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class clientframe extends javax.swing.JFrame {
String ip="",td=""; private Socket s;
/** Creates new form clientframe */
public clientframe() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel2 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel2.setText(" SERVER IP ADDRESS");
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jLabel3.setText(" TARGET DIRECTORY");
jTextField2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField2ActionPerformed(evt);
}
});
jLabel4.setText(" FILES FOUND");
jLabel5.setText("ENTER FILE NO. TO BE REQUESTED");
jButton1.setText("OK");
jButton2.setText("SCAN");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4))
.addGap(87, 87, 87)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 237, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1)
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(72, 72, 72)
.addComponent(jButton2))
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(169, 169, 169))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel5)
.addGap(18, 18, 18)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(372, Short.MAX_VALUE))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2))
.addGap(32, 32, 32)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 72, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
.addGap(20, 20, 20)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(33, 33, 33)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(31, 31, 31)
.addComponent(jButton1))
.addComponent(jLabel3))
.addContainerGap())
);
pack();
}// </editor-fold>
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ip=jTextField1.getText().trim();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try {
s = new Socket(InetAddress.getByName(ip), 5432);
} catch (IOException ex) {
Logger.getLogger(clientframe.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
td=jTextField2.getText().trim();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) throws IOException {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new clientframe().setVisible(true);
}
});
String list[]=new String[20];
String ip="",td="";
int p=0,ch;
Socket s=new Socket(InetAddress.getByName(ip),5432);
System.out.println("CLIENT connected to SERVER at"+ s);
DataInputStream i=new DataInputStream(s.getInputStream());
DataOutputStream o=new DataOutputStream(s.getOutputStream());
ch=getFile(i,o,list);
FileOutputStream fout = new FileOutputStream(td+list[ch-1]);
try
{
System.out.println("Transferring FILE: "+list[ch-1]+"\n\n");
do
{
ch=i.read();
fout.write(ch);
}while(ch!=-1);
}
catch(SocketException e) //Exception indicates FILE TRANSFER complete.
{
System.out.println("***FILE TRANSFER COMPLETE***");
}
}
public static int getFile(DataInputStream din,DataOutputStream dout,String flist[]) throws IOException
{
Scanner src=new Scanner(System.in);
int i=0,ch=0;
System.out.println("***FILE-LIST from SERVER***\n\n");
ch=din.read();
for(i=0;i<ch;i++)
{
flist[i]=din.readUTF();
System.out.println((i+1)+". "+flist[i]);
}
System.out.println("Enter File to be Requested");
ch=src.nextInt();
dout.writeUTF(flist[(ch-1)]);
dout.flush();
return (ch);
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
// End of variables declaration
}
这是我的服务器代码。它还没有GUI。目录是预设的
package teb3;
import java.io.*;
import java.net.*;
/**********************************
* Simulate FTP over TCP
*
* FTPServer.java
* *******************************/
class FTPServer
{
public static void main(String args[])throws Exception
{
int c;
String s,inp;
//CONNECTION ESTABLISHMENT PHASE
ServerSocket ss=new ServerSocket(5432);
System.out.println("***WAITING for SERVER***\n\n");
Socket soc=ss.accept();
//DATA TRANSFER PHASE
System.out.println(soc+" AND SERVER CONNECTED!!!");
DataInputStream i=new DataInputStream(soc.getInputStream());
DataOutputStream o=new DataOutputStream(soc.getOutputStream());
getFilelist(i,o);
inp=i.readUTF(); //readUTF reads in Unicode Text Format hence
FileInputStream fin = new FileInputStream("F:/COLLEGE COURSE/semester 5/BCE/"+inp);
System.out.println("GET MESSAGE RECEIVED for FILE: "+inp);
while((c=fin.read())!=-1)
{
o.write(c);
o.flush();
}
fin.close();
}
public static void getFilelist(DataInputStream din,DataOutputStream dout) throws IOException
{
int p=0;
File folder = new File("F:/COLLEGE COURSE/semester 5/BCE/");
File[] listOfFiles = folder.listFiles();
for (File listOfFile : listOfFiles)
//listFiles() returns both files as well as directories so display only Files
if (listOfFile.isFile())
{
p++;
}
dout.write(p);
dout.flush();
for (File listOfFile : listOfFiles)
if (listOfFile.isFile())
{
dout.writeUTF(listOfFile.getName());
dout.flush();
}
}
}
共 (0) 个答案