客户端提交的内容后,没法收到服务端发回的信息。 
客户端程序:
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
public class Database_client extends Applet implements Runnable ,ActionListener
{
Button b1,b2,b3;Label a,b,c,d,e,f;Panel p1,p2;TextField text,bb,cc,dd,ee,ff;
Socket scoket=null;
DataInputStream in = null;
DataOutputStream out = null;
Thread thread;
public void init()
{ //生成界面;
//setLayout(new BorderLayout());
b1=new Button("提交");b2=new Button("清除");b3=new Button("退出");
a=new Label("请你仔细核对所填项的数据后提交!");
b=new Label("用户账号");c=new Label("用户密码");
d=new Label("转入金额"); e=new Label("转入户账");
//f=new Label("注意");
bb=new TextField(16);ee=new TextField(16);
dd=new TextField(16);cc=new TextField(16);
text=new TextField(20);
add(a);
add(b);add(bb);
add(c);add(cc);
add(d);add(dd);add(e);add(ee);
add(b1);add(b2);add(b3);add(text);
b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);

}
public void start()
{
try {
   scoket=new Socket(this.getCodeBase().getHost(),4331);
in=new DataInputStream(scoket.getInputStream());
out=new DataOutputStream(scoket.getOutputStream());
}
catch(IOException e){}
if(thread==null)
{
thread=new Thread(this);
//thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}

} public void run()
{

String s=null;
while(true)
{
try
{
s=in.readUTF();
text.setText(s);
}
catch(IOException e)
{
System.out.println("与服务器已断开!");
text.setText("与服务器已断开!");
break;
}

}
}

public void actionPerformed(ActionEvent e)
{
if (e.getSource()==b1)
{//需要把
String m=null;;//把文本框的内容都防入s中 用”,“做分界
String s1=bb.getText();String s2=cc.getText();
String s3=dd.getText();String s4=ee.getText();
m=s1+","+s2+","+s3+","+s4;
if(m!=null)
{
try

out.writeUTF(m);
// out.flush();
}
catch(IOException ee){}
}

}
else if (e.getSource()==b2)
{
bb.setText(null);cc.setText(null);
dd.setText(null);ee.setText(null);

}
else if (e.getSource()==b3)
{
System.exit(0);
}
}
}
服务器端程序:import java.io.*;
import java.net.*;
//import java.util.*;
import java.sql.*;
import java.util.StringTokenizer;
public class Database_server 
{ public static void main(String args[])
{
ServerSocket server=null;

Socket you=null;

while (true)
{
try
{
server = new ServerSocket(4331);
}
catch(IOException e)
{
System.out.println("正在监听");
}
try
{
you=server.accept();//(Database_server.java:27) System.out.println("客户端的地址:"+you.getInetAddress());
}
catch(IOException e)
{
System.out.println("正在等待客户:");
}
if(you != null)
{
 new Server_thread(you).start();
}
else{ continue; }
}

}
}class Server_thread extends Thread
{
Socket socket;
Connection con=null;
Statement stmt=null;
DataOutputStream out=null;
DataInputStream in=null;
String s=null;Float M;int i=0;
Server_thread(Socket t)
{
socket =t;
try
{
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
}
catch(IOException e){}     }
public void run()
{


while(true)
{    String a[]=new String[3];
         for(int i=0;i<4;i++) a[i]=null;
   try{int i=0;
  s=in.readUTF();     
       StringTokenizer f=new StringTokenizer(s,",");
   while(f.hasMoreElements()){a[i]=f.nextToken();i++;} //获取的内容到数组a[i]中
   
   try
{
 M=Float.valueOf(a[2]).floatValue();
}
catch(NumberFormatException e){}
   
    String sql1="select * from sys_table where 卡号=? and 密码=? ";
PreparedStatement ps1=con.prepareStatement(sql1);
ps1.setString(1, a[0]);
ps1.setString(2, a[1]);
    ResultSet rs=ps1.executeQuery();
    while(rs.next())
      { float yu_e1=rs.getFloat("余额");
  if((yu_e1<M)&&(yu_e1==M))  
  {
  try{out.writeUTF("账户余额不足请冲值");}
  catch(IOException ex)
  {
  System.out.println("dsdsd");
  }
 
  break;
  }
      
  else {
String s="'"+a[3]+"'";
  String sql2="select * from sys_table where 卡号=?";
PreparedStatement ps2=con.prepareStatement(sql2);
ps2.setString(1, s);
    ResultSet rs2=ps2.executeQuery();
    while(rs2.next())     
       {
     float yu_e2=rs2.getFloat("余额");
    
      float y1=yu_e1-M;float y2=yu_e2+M;
      
      String sql3="updata user_table set 余额="+y1+ " where 卡号="+a[0].trim();
      stmt.executeUpdate(sql3);
      String sql4="updata user_table set 余额="+y2+ " where 卡号="+a[3].trim();
 stmt.executeUpdate(sql4);
   try{
   out.writeUTF("转帐成功");
   }
   catch(IOException ex)
   {
   System.out.println("oooooooo");
   }
    
   System.out.println("转帐成功");
     break;
       }
       }sleep(100);
        }
}catch(Exception ex){}

}
}
}

解决方案 »

  1.   

    String a[]=new String[3];
             for(int i=0;i<4;i++) a[i]=null;越界  !
    i<3
      

  2.   

    监听是一个连续过程!
    该用循环,要不总是空的!你不可能同时启动,就给它一个socket
      

  3.   

    只看了服务器端的!serversocket you没有得到连接的时候,一直是空的!但是你没有捕捉异常!
    嘿嘿!!
      

  4.   

    怎么改 说说哈 
    我刚自学的JAVA 不是很懂 这是照书上COPY的,自己稍做了修改
      

  5.   

    错误:
    正在监听
    Exception in thread "main" java.lang.NullPointerException
    at Database_server.main(Database_server.java:27)
    就是这行
    you=server.accept();//(Database_server.java:27)
      

  6.   

    Applet
    为什么继承它呀,这不是小应用程序吗。
      

  7.   

    太长,只能大概看:
    server = new ServerSocket(4331);
    这个放到你那个while(true)循环之外,服务器端只要创建一次,然后监听客户端消息。
      

  8.   

    补充一下:你现在是循环创建server对象,同时一次循环完毕没有关闭通讯端口,当然有问题。
      

  9.   

    String a[]=new String[3];
             for(int i=0;i<4;i++) a[i]=null;  // 数组越界  i<3;public class Database_server 
    {
    public static void main(String args[])
       {
          ServerSocket server=null;       Socket you=null;
        try
        {
            server = new ServerSocket(4331);
         }catch(IOException e){System.out.println("正在监听");}while(true)
    {
    try
    {
    you=server.accept();//(Database_server.java:27)System.out.println("客户端的地址:"+you.getInetAddress());
    }catch(IOException e){System.out.println("正在等待客户:");}
    if(you != null)
     new Server_thread(you).start();
    else
      continue;
    }}
    }
      

  10.   

    out.writeUTF(m); 
    这里可能出错了..