import java.net.*;
import java.io.*;public class Client01
{
DataInputStream in_from_server;

ObjectOutputStream obout_to_server;
static int port;
static String iaddr;

static String arr[]; public Client01(String arr[])
{

try{
Socket socket=new Socket(InetAddress.getByName(iaddr),port); in_from_server=new DataInputStream(socket.getInputStream());
obout_to_server=new ObjectOutputStream(socket.getOutputStream()); obout_to_server.writeObject(brr[]); String info =in_from_server.readUTF();
System.out.println(info);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
public static void main(String args[])
{
if(args.length<3)
{
System.out.println("usage :java Client01 [iaddr][port][query1exec2][database][messageout]");
System.exit(1);
}
iaddr=args[0];
port=Integer.parseInt(args[1]);
/*for(int i=2;i<=4;i++)
{
arr[i-2]=args[i];
}
*/
String arr[]={args[2],args[3],args[4]};
//qu_exec=Integer.parseInt(args[2]);
//db=args[3];
//messageout=args[4];
Client01 ClientStart=new Client01();
}
}如何将args[2] args[3] args[4] 作为一个字符串数组传到ServerSocket
ServerSocket 代码如下
import java.net.*;
import java.io.*;
import java.sql.*;public class Server01
{
ServerSocket SS;
Socket socket;
static int port; DataOutputStream out_to_client;
//DataInputStream in_from_client;
ObjectInputStream obin_from_client;
String concept="";
Connection con;
Statement stmt;
ResultSet rs;
//static String arr[];
int qu_exec;

String message; public Server01()
{
try{
SS=new ServerSocket(port);
System.out.println("Server is created and waiting Client to connect..");
while(true)
{
socket=SS.accept();
System.out.println("Client IP="+socket.getInetAddress().getHostAddress());

//in_from_client=new DataInputStream(socket.getInputStream());
obin_from_client=new ObjectInputStream(socket.getInputStream());
String arr[]=(String[]) obin_from_client.readObject();
out_to_client=new DataOutputStream(socket.getOutputStream()); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dabase="jdbc:odbc:"+arr[1];
con=DriverManager.getConnection(dabase);
stmt=con.createStatement(); qu_exec=Integer.parseInt(arr[0]);

message=arr[2]; if(qu_exec==1)
{
rs=stmt.executeQuery(message);
out_to_client.writeUTF("query");
System.out.flush();
rs.close();
}
else
{
stmt.executeUpdate(message);
}


out_to_client.writeUTF(" works successfully");


for(int i=0;i<=1000000;i++)
System.out.flush();

stmt.close();
con.close(); }

}
catch(java.lang.Exception e)
{
System.out.println(e.getMessage());
}
}
public static void main(String args[])
{
if(args.length<1)
{
System.out.println("usage: java Server01 [port]");
System.exit(1);
}
port=Integer.parseInt(args[0]);
String test=args[0]+"dfhk";
System.out.println(test);
Server01 ServerStart=new Server01();
}
}

解决方案 »

  1.   

    你的代码不报错吗,你那个Client01根本没有无参构造器啊,你把你的字符串数组通过你那个带参构造器传进去,然后用out_to_client对象print或者write不就可以了
      

  2.   

    哦 代码粘贴错误 那个Client01()方法是无参的,通过全局变量static String arr[]将值通过obout_to_server.writeObject(brr[]);传给服务器,可是编译时报错
    D:\javapractice\database>javac Client01.java
    Client01.java:23: 需要 ".class"
                            obout_to_server.writeObject(arr[]);
                                                             ^
    1 错误D:\javapractice\database>javac Client01.java
    Client01.java:23: 需要 ".class"
                            obout_to_server.write(arr[]);
                                                       ^
    1 错误
    如果用代餐的Client01()方法还是报错啊!!
      

  3.   

    有时候编译通了 可是一运行 就有问题。哪位能把程序调通啊!
    usage :java Client01 [iaddr][port][query1exec2][database][messageout]
    参数意义:
    messageout为sql语句
    database为数据库名
    如果query1exec2值为 1 表示sql语句是查询语句,否则为数据修改执行语句
      

  4.   

    你的代码是有错误的,首先,编译错误,是语法错误:
    obout_to_server.writeObject(arr[]);//arr[]  是不正确的,应当是 obout_to_server.writeObject(arr);其次,没事你为什么又在后面重新定义局部变量arr??
    String arr[]={args[2],args[3],args[4]};
    这里定义的是main方法中的局部变量,跟外面定义的static String arr[] 一点关系没有,就是说你这里给arr赋值,在外面定义的arr是不会有什么变化的。改掉这两个问题,客户端和服务端就能通信了。
    不过,如果实际做项目的话,还是建议设计一套严谨一点的传输协议吧,呵呵。使用对象流的方式,有时候会令你很痛苦。
      

  5.   

    漏了,
    String arr[]={args[2],args[3],args[4]};
    应当改为:
    arr=new String[]{args[2],args[3],args[4]};