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();
}
}
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();
}
}
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()方法还是报错啊!!
usage :java Client01 [iaddr][port][query1exec2][database][messageout]
参数意义:
messageout为sql语句
database为数据库名
如果query1exec2值为 1 表示sql语句是查询语句,否则为数据修改执行语句
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是不会有什么变化的。改掉这两个问题,客户端和服务端就能通信了。
不过,如果实际做项目的话,还是建议设计一套严谨一点的传输协议吧,呵呵。使用对象流的方式,有时候会令你很痛苦。
String arr[]={args[2],args[3],args[4]};
应当改为:
arr=new String[]{args[2],args[3],args[4]};