Client code:
import java.io.*;
import java.net.*;
public class SimpleClient {
public static void main(String[] args) throws IOException {
Socket clientSocket = null;
try {
clientSocket = new Socket(args[0], 4442);
} catch (UnknownHostException e) {
System.err.println("Don't know about host: " + args[0] + ".");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for " +
"the connection to: " + args[0] + "");
System.exit(1);
}
BufferedInputStream in;
BufferedOutputStream out;
try {
in = new BufferedInputStream(clientSocket.getInputStream());
out = new BufferedOutputStream(clientSocket.getOutputStream());
} catch (IOException e) {
System.out.println(e.toString());
return;
}
byte[] m_txt = args[1].getBytes();
out.write(m_txt, 0, m_txt.length);
out.flush();
byte[] m_rcv = new byte[m_txt.length];
int n = in.read(m_rcv, 0, m_rcv.length);
if (n != m_rcv.length) {
System.out.println("Some data are lost ...");
}
System.out.println(new String(m_rcv));
out.close();
in.close();
clientSocket.close();
}
}
Server:
import java.io.*;
import java.net.*;
public class SimpleServer {
public static void main(String[] args) throws IOException {
boolean listening = true;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4442);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(1);
}
while(listening) {
Socket clientSocket = serverSocket.accept();
(new SimpleConHandler(clientSocket)).start();
}
serverSocket.close();
}
}
Connection Handler:
import java.io.*;
import java.net.*;
public class SimpleConHandler extends Thread
{
private Socket clientSocket;
public SimpleConHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
}
public void run() {
BufferedInputStream in;
BufferedOutputStream out;
try {
in = new BufferedInputStream(clientSocket.getInputStream());
out = new BufferedOutputStream(clientSocket.getOutputStream());
} catch (IOException e) {
System.out.println(e.toString());
return;
}
try {
byte[] msg = new byte[4096];
int bytesRead = 0;
int n;
while((n = in.read(msg, bytesRead, 256)) != -1) {
bytesRead += n;
if (bytesRead == 4096) {
break;
}
if (in.available() == 0) {
break;
}
}
for(int i=bytesRead; i>0; i--) {
out.write(msg[i-1]);
}
out.flush();
} catch(IOException e1) {
System.out.println(e1.toString());
}
try {
out.close();
in.close();
clientSocket.close();
} catch ( IOException e2 ) {;}
}
}
First i RUN Server, but when i try to RUN Client, the error which i am getting is:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at SimpleClient.main(SimpleClient.java:11)
May be i have to use different consoles to run both the Server and the Client? If so, then please tell me the way. i am using Java Eclipse 1.6 SE.
解决方案
clientSocket = new Socket(args[0], 4442);
Your program needs a command line argument:
java your.Program