如何在Java Eclipse中使用Socket编程运行服务器客户端代码? [英] How to Run Server Client code using Socket Programming in Java Eclipse?

查看:263
本文介绍了如何在Java Eclipse中使用Socket编程运行服务器客户端代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

客户端代码

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

服务器 p>

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: / p>

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

首先我RUN Server,但是当我试图运行客户端,我得到的错误是:

First i RUN Server, but when i try to RUN Client, the error which i am getting is:

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

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at SimpleClient.main(SimpleClient.java:11)

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

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< ip>

这篇关于如何在Java Eclipse中使用Socket编程运行服务器客户端代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆