读书人

Please help me, I have a server.jav

发布时间: 2012-01-06 22:55:18 作者: rapoo

Please help me, I have a server.java and client.java to test the file transmission on internet
How do I set up the web server for this server.java so that a client can connect to server by its ip?

Sorry I can 't type Chinese now. Can you give me a basic idea?

These two apps only work in LAN, how do I make it work through internet?

Code:

//server

import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
import java.util.Random;
import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.border.*;

public class Server extends Frame implements ActionListener, WindowListener
{

static ServerSocket listenSocket;
static Socket connection;
private static int maxConnections=0;
//final JFileChooser fc = new JFileChooser();


static String message;

static TextField hostDisplay, portDisplay;
static TextArea logDisplay, msgDisplay;
Panel topPanel;
Panel middlePanel;
Panel buttonPanel;
Button sendButton, quitButton;

public static final int DEFAULT_PORT = 8901;
static String host;
static int port;

public Server ( String s)
{
super ( s );
buildUI ();

} // end Server constructor


public void connectClient ( )
{
if ( ! ( portDisplay.getText () ).equals ( " " ) ) port = Integer.parseInt ( portDisplay.getText () );
else port = DEFAULT_PORT;

} // end connectClient



public static void main ( String [ ] args )
{

Server serverFrame = new Server( "Server " );

serverFrame.addWindowListener ( serverFrame );

int i=0;

if ( ! ( portDisplay.getText () ).equals ( " " ) ) port = Integer.parseInt ( portDisplay.getText () );////
else port = DEFAULT_PORT;////

try
{
ServerSocket listener = new ServerSocket(port);
Socket server;

logDisplay.setText ( "Server running on "+host+ ", port "+port+ "\n " );/////

while((i++ < maxConnections) || (maxConnections == 0))
{
doComms connection;


server = listener.accept();
System.out.println( "Connected: " );
doComms conn_c= new doComms(server);
Thread t = new Thread(conn_c);
t.start();
}
}
catch (IOException ioe)
{
System.out.println( "IOException on socket listen: " + ioe);
ioe.printStackTrace();
}

} // end main


public void buildUI ()
{

try
{
InetAddress here = InetAddress.getLocalHost ();
host = here.getHostName ();
}
catch (UnknownHostException e)
{ ;}

hostDisplay = new TextField ( host, 30 );
hostDisplay.setEditable ( false );
portDisplay = new TextField ( Integer.toString ( DEFAULT_PORT ), 4 );
topPanel = new Panel ();
topPanel.setLayout ( new GridLayout ( 2, 1 ) );
topPanel.add ( hostDisplay );
topPanel.add ( portDisplay );

logDisplay = new TextArea ( 40, 10 );
msgDisplay = new TextArea ( 40, 10 );
middlePanel = new Panel ();
middlePanel.setLayout ( new GridLayout ( 2, 1 ) );
middlePanel.add ( logDisplay );
middlePanel.add ( msgDisplay );

sendButton = new Button ( "Send File " );
quitButton = new Button ( "Quit " );
sendButton.addActionListener ( this );
quitButton.addActionListener ( this );
buttonPanel = new Panel ( );
buttonPanel.add ( sendButton );
buttonPanel.add ( quitButton );

add ( "North ", topPanel );
add ( "Center ", middlePanel );
add ( "South ", buttonPanel );

resize ( 400, 450 );
setVisible ( true );

} // end buildUI

//**** ActionListener methods

public void actionPerformed ( ActionEvent e )
{

Object s = e.getSource();

// *** process Button actions

if ( s instanceof Button )
{

if ( s == sendButton )
{
/* int returnVal = fc.showOpenDialog(Server.this);

logDisplay.append( "Opening - ");

if (returnVal == JFileChooser.APPROVE_OPTION)


{
File file = fc.getSelectedFile();

logDisplay.append(file.getName() + "\n ");

//Create a client, give it the chosen filename, and send the data across

if (send(file.getPath().toString()))
logDisplay.append( "Success. " + "\n ");
else
logDisplay.append( "Failure. " + "\n ");

} // end sendButton*/
}

if ( s == quitButton )
{
hide ();
dispose ();
System.exit ( 0 );
} // end quitButton


} // end process Button actions

} // end actionPerformed


//**** WindowListener methods

public void windowActivated ( WindowEvent e )
{
}

public void windowDeactivated ( WindowEvent e )
{
}

public void windowOpened ( WindowEvent e )
{
}

public void windowClosed ( WindowEvent e )
{
}

public void windowClosing ( WindowEvent e )
{
hide ();
dispose ();
System.exit(0);
}

public void windowIconified ( WindowEvent e )
{
}

public void windowDeiconified ( WindowEvent e )
{
}


} // end Server


class doComms implements Runnable


{
private Socket server;
private String line,input;
Random rand = new Random();
final String OUTPUTFILENAME = "C:\\receivedData ";
doComms(Socket server)
{
this.server=server;
}

public void run ()
{

try
{


FileOutputStream fos = new FileOutputStream(OUTPUTFILENAME);
BufferedOutputStream out = new BufferedOutputStream(fos);
BufferedInputStream in = new BufferedInputStream( server.getInputStream() );
//Read, and write the file to the socket
int i;
while ((i = in.read()) != -1)
{
out.write(i);
//Server.logDisplay.appendText( " "+i);
//Server.logDisplay.appendText( "Receiving data... "+ "\n ");
}


out.flush();
//out1.flush();
//out2.flush();
in.close();
//out1.close();
out.close();
//out2.close();
server.close();

Server.logDisplay.appendText( "Transfer complete. File is saved to C:recievedData ");


}

catch(Exception e)
{



Server.logDisplay.appendText( "Error! It didn 't work! " + e + "\n ");
}

//Sleep...
try {
Thread.sleep(1000);
}
catch (InterruptedException ie)
{
Server.logDisplay.appendText( "Interrupted ");
}


}
}




[解决办法]
//Client


import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.border.*;

public class Client extends Frame implements ActionListener, WindowListener
{


Socket connection;
//static final String OUTPUTFILENAME = "C:\\receivedData ";
final JFileChooser fc = new JFileChooser();

InputStream inStream;
DataInputStream inDataStream;
OutputStream outStream;
DataOutputStream outDataStream;

public static final String DEFAULT_HOST = "DLKD122-PC7 ";
public static final int DEFAULT_PORT = 8901;
static String host;
static int port;

static String message;

static TextField hostDisplay, portDisplay;
static TextArea logDisplay, msgDisplay;
Panel topPanel;
Panel middlePanel;
Panel buttonPanel;
Button sendButton, sendFileButton,quitButton;

public Client ()
{

super ( "Client " );
buildUI ();

} // end Client


public void connectClient ( )
{

try
{
InetAddress here = InetAddress.getLocalHost ();
logDisplay.appendText ( "here = "+here+ "\n " );
host = here.getHostName ();
logDisplay.appendText ( "host = "+host+ "\n " );
}
catch (UnknownHostException e) { ;}

//host = hostDisplay.getText ();
//if ( host.equals ( " " ) )
host = DEFAULT_HOST;
if ( ! ( portDisplay.getText () ).equals ( " " ) )
port = Integer.parseInt ( portDisplay.getText () );
else
port = DEFAULT_PORT;

try
{
connection = new Socket ( InetAddress.getByName (host), port );
//connection = new Socket ( InetAddress.getByAddress (host), port );
outStream = connection.getOutputStream ();
outDataStream = new DataOutputStream ( outStream );
inStream = connection.getInputStream ();
inDataStream = new DataInputStream ( inStream );

logDisplay.setText ( "Socket created: connecting to server\n " );

message = msgDisplay.getText ();
outDataStream.writeUTF ( message );
logDisplay.appendText ( "Message, below, sent to Server\n " );



try
{
msgDisplay.setText ( " " );
msgDisplay.setForeground ( Color.red );
while ( true )
{
message = inDataStream.readUTF ();
msgDisplay.appendText ( message );
logDisplay.appendText ( "Message, below, received from server\n " );
} // end while
} // end try for input
catch ( EOFException except )
{
connection.close ();
logDisplay.appendText ( "Connection closed\n " );
} // end catch
catch ( IOException except )
{
System.out.println ( "IO Exception ");
except.printStackTrace ();
} // end catch

} // end try

catch ( IOException except)
{
except.printStackTrace ();
} // end catch

} // end connectClient

public static boolean send( String filename )
{

try
{
InetAddress here = InetAddress.getLocalHost ();
logDisplay.appendText ( "here = "+here+ "\n " );
host = here.getHostName ();
logDisplay.appendText ( "host = "+host+ "\n " );
}
catch (UnknownHostException e) { ;}

//host = hostDisplay.getText ();
//if ( host.equals ( " " ) )
host = DEFAULT_HOST;
if ( ! ( portDisplay.getText () ).equals ( " " ) )
port = Integer.parseInt ( portDisplay.getText () );
else port = DEFAULT_PORT;

try
{
logDisplay.append( "Sending data...\n ");
Socket skt = new Socket(host, port);

//Create a file input stream and a buffered input stream.
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream( skt.getOutputStream() );

//System.out.println( "after new inputstream ");
long currTime = System.currentTimeMillis();

//Read, and write the file to the socket
int i;
while ((i = in.read()) != -1)
{
out.write(i);
//System.out.println(i);
}

//out.write(-1); // to signal the end of file??
//Close the socket and the file
//System.out.println( "about to read ");


//logDisplay.append(message);
out.flush();
out.close();
in.close();
//in1.close();
//in2.close();
skt.close();
//logDisplay.append( " "+(System.currentTimeMillis()-currTime));
return true;
}
catch( Exception e )
{


logDisplay.append( "Error! It didn 't work! " + e + "\n ");

return false;
}
}



public static void main ( String [ ] args )
{

Client client = new Client ();
client.addWindowListener ( client );

} // end main


public void buildUI ()
{

try
{
InetAddress here = InetAddress.getLocalHost ();
host = here.getHostName ();
}
catch (UnknownHostException e)
{ ;}

hostDisplay = new TextField ( host, 30 );
portDisplay = new TextField ( Integer.toString ( DEFAULT_PORT ), 4 );
topPanel = new Panel ();
topPanel.setLayout ( new GridLayout ( 2, 1 ) );


topPanel.add ( hostDisplay );
topPanel.add ( portDisplay );

logDisplay = new TextArea ( 40, 10 );
msgDisplay = new TextArea ( 40, 10 );
msgDisplay.setText ( "Default Message. " );
middlePanel = new Panel ();
middlePanel.setLayout ( new GridLayout ( 2, 1 ) );
middlePanel.add ( logDisplay );
middlePanel.add ( msgDisplay );

sendButton = new Button ( "Send Message " );
sendFileButton = new Button ( "Send File " );
quitButton = new Button ( "Quit " );
sendButton.addActionListener ( this );
sendFileButton.addActionListener ( this );
quitButton.addActionListener ( this );
buttonPanel = new Panel ( );
buttonPanel.add ( sendFileButton );
buttonPanel.add ( sendButton );
buttonPanel.add ( quitButton );

add ( "North ", topPanel );
add ( "Center ", middlePanel );
add ( "South ", buttonPanel );

resize ( 400, 450 );
show ();

} // end buildUI


public void actionPerformed ( ActionEvent e )
{
Object s = e.getSource();

// *** process Button actions

if ( s instanceof Button )
{
if ( s == sendButton )
{
connectClient ();
} // end sendButton

if ( s == sendFileButton )
{
int returnVal = fc.showOpenDialog(Client.this);

logDisplay.append( "Opening - ");

if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();

logDisplay.append(file.getName() + "\n ");

//Create a client, give it the chosen filename, and send the data across

if (send(file.getPath().toString()))
logDisplay.append( "Success. " + "\n ");
else
logDisplay.append( "Failure. " + "\n ");
}

} // end sendButton
if ( s == quitButton )
{
this.hide ();
this.dispose ();
System.exit ( 0 );
} // end quitButton

} // end process Button actions

} // end actionPerformed


//**** WindowListener methods

public void windowActivated ( WindowEvent e )
{
}

public void windowDeactivated ( WindowEvent e )
{
}

public void windowOpened ( WindowEvent e )
{
}

public void windowClosed ( WindowEvent e )
{
}

public void windowClosing ( WindowEvent e )
{
hide ();
dispose ();
System.exit(0);
}

public void windowIconified ( WindowEvent e )
{
}

public void windowDeiconified ( WindowEvent e )
{
}


} // end Client

读书人网 >J2SE开发

热点推荐