如何在Java Eclipse中使用Socket编程运行服务器客户端代码?

时间:2011-01-18 17:30:48

标签: java sockets client-server

客户代码

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();
    }
}

服务器

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();
    }
}

连接处理程序:

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 ) {;}
    }
}

首先是我的RUN服务器,但是当我尝试运行客户端时,我得到的错误是:

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0 在SimpleClient.main(SimpleClient.java:11)​​

可能我必须使用不同的控制台来运行服务器和客户端吗?如果是的话,那么请告诉我。我正在使用Java Eclipse 1.6 SE。

1 个答案:

答案 0 :(得分:1)

clientSocket = new Socket(args[0], 4442);

您的程序需要命令行参数:

java your.Program <ip>