今天做了一个applet登陆界面 ,用socket与服务器通信的,但是只能接收第一次服务器传回的数据,再READLINE()就读不出来,请大虾们帮忙看看,谢谢。===========APPLET客户端
import javax.swing.*;import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;public class LoginTest extends JApplet{
private JTextField usrTx;
private JPasswordField pwdTx;
private JPanel msgPane;
private JPanel pane;
private Boolean canSend;
private BufferedReader input;
private Socket socket;
private PrintWriter output;
private String by;

void buildConstraints(GridBagConstraints gbc,int gx,int gy,int gw,int gh,int wx,int wy){
gbc.gridx=gx;
gbc.gridy=gy;
gbc.gridwidth=gw;
gbc.gridheight=gh;
gbc.weightx=wx;
gbc.weighty=wy;
}

public void init(){

try{
socket=new Socket(InetAddress.getLocalHost(),5000);
input=new BufferedReader(new InputStreamReader(socket.getInputStream()));
output=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
by=input.readLine().trim();
String head=new String(by);
if(head.equals("Hello")){
canSend=true;
}
}
catch(Exception e){
JOptionPane.showMessageDialog(msgPane, e);
}

pane=new JPanel();
msgPane=new JPanel();
JButton login_btn=new JButton("login");
JButton reset_btn=new JButton("reset");
usrTx=new JTextField(10);
pwdTx=new JPasswordField(10);
JLabel usrNameLabel=new JLabel("username:");
JLabel passWordLabel=new JLabel("password:");

ResetAction resetact=new ResetAction();
LoginAction loginact=new LoginAction();
reset_btn.addActionListener(resetact);
login_btn.addActionListener(loginact);
GridBagLayout gridbag=new GridBagLayout();
GridBagConstraints constraints=new GridBagConstraints();
pane.setLayout(gridbag);

buildConstraints(constraints,0,0,1,1,10,1);
constraints.fill=GridBagConstraints.EAST;
gridbag.setConstraints(usrNameLabel, constraints);
pane.add(usrNameLabel);

buildConstraints(constraints,1,0,1,1,10,1);
constraints.fill=GridBagConstraints.EAST;
gridbag.setConstraints(usrTx, constraints);
pane.add(usrTx); buildConstraints(constraints,0,1,1,1,0,1);
constraints.fill=GridBagConstraints.EAST;
gridbag.setConstraints(passWordLabel, constraints);
pane.add(passWordLabel);

buildConstraints(constraints,1,1,1,1,0,1);
constraints.fill=GridBagConstraints.EAST;
gridbag.setConstraints(pwdTx, constraints);
pane.add(pwdTx);

buildConstraints(constraints,0,2,1,1,0,1);
constraints.fill=GridBagConstraints.EAST;
gridbag.setConstraints(login_btn, constraints);
pane.add(login_btn);

buildConstraints(constraints,1,2,1,1,10,1);
constraints.fill=GridBagConstraints.EAST;
gridbag.setConstraints(reset_btn, constraints);
pane.add(reset_btn);
pane.add(msgPane);
setContentPane(pane);
}

private class ResetAction implements ActionListener{
public void actionPerformed(ActionEvent event){
usrTx.setText("");
pwdTx.setText("");
}
}

private class LoginAction implements ActionListener{
private void Send(String message) throws IOException
{
if(canSend){
output.println(message);
output.flush();
JOptionPane.showMessageDialog(msgPane, message);
}
try{
by=input.readLine();
JOptionPane.showMessageDialog(msgPane, by);
}
catch(IOException e){
e.printStackTrace();
}
}


public void actionPerformed(ActionEvent event){
if(usrTx.getText().equals("")){
JOptionPane.showMessageDialog(msgPane, "input username!");
}else if(String.copyValueOf(pwdTx.getPassword()).equals("")){
JOptionPane.showMessageDialog(msgPane, "input password!");
}else{
try {
Send("username="+usrTx.getText()+"&password="+String.copyValueOf(pwdTx.getPassword()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}===========Servlet服务器端============
package testServlet;import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.io.DataOutputStream;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.InputStreamReader;
import java.sql.*;
import java.util.regex.*;
public class testServ extends HttpServlet{
    private String outs;
    
    public void init() throws ServletException   
    {        
        try  
        {   
         new SocketServApp().run();
        }   
        catch(Exception e)   
        {   
            e.printStackTrace();   
        }   
    }       
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
       
    } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
 }}
class SocketServApp{
    public void run(){
        try  
        {   
            ServerSocket server=new ServerSocket(5000);  ////在端口5000注册服务    
            while(true){
                try{   
                 Socket socket=server.accept();            
                    PrintWriter output=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);  
                    output.println("Hello");
                    output.flush();
  ServerThread thread=new ServerThread(socket);
  thread.start();
                    System.out.println(socket);   
                }   
                catch(SocketException e)   {   
                    e.printStackTrace();   
                }               }
        }   
        catch(IOException e)   
        {   
            e.printStackTrace();   
        }   
    }
}class ServerThread extends Thread
{
private Socket sock;
private BufferedReader in;
private PrintWriter out;

ServerThread(Socket socket)
{
this.sock=socket;
} public void run()
{
System.out.println("-----启动会话------");
try
{
in=new BufferedReader(new InputStreamReader(sock.getInputStream(),"utf-8"));
while(true)
{
System.out.println(sock);
String msg=in.readLine();
if(msg==null)
{
System.out.println("-----------会话结束----------");
break; }
else{
Pattern pattern1 = Pattern.compile("username=([a-zA-Z0-9]+)&password=([a-zA-Z0-9]+)");
Matcher matcher = pattern1.matcher(msg);
if(matcher.find())
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=root");
Statement stat = conn.createStatement();
ResultSet rs=stat.executeQuery("select * from user where username='"+matcher.group(1)+"' and password='"+matcher.group(2)+"'");
if(rs.next()){
System.out.println("login");
sendMsg("Login");
}else{
sendMsg("Wrong");
System.out.println("wrong");
}
}
}
}
}
catch(Exception error)
{
System.out.println("A1"+error+"A1");
error.printStackTrace();
try
{
in.close();
}
catch(Exception er)
{
System.out.println("A2"+er+"A2");
}
System.out.println("会话结束");
}
}
void sendMsg(String msgs){
try{
out=new PrintWriter(new OutputStreamWriter(sock.getOutputStream()),true);
System.out.println(sock);
System.out.println(msgs);
out.print(msgs);
out.flush();
}
catch(Exception error)
{
System.out.println("发送异常:"+error);
} }
}