今天做了一个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);
} }
}
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);
} }
}
解决方案 »
- Exception in thread "main" java.lang.NoClassDefFoundError: Demo
- 新手练习求助~!~Struts2+hibernate+spring上传文件action老是接收null,导致NullPointerException
- Spring 构造方式注入枚举类型 怎么写
- 高手指点!急!急!
- java如何通过IP获取城市代码
- jsp for循环使用> 的问题
- 各位大侠,给小弟弟介绍个开源的j2ee项目看看代码吧
- 请教各位在 weblogic中创建数据库连接池,连接mssql sersver数据库时,出现如下问题,如何解决!在线等!
- 一个ejb 部署描述符自动生成的工具的开发(初步设想,大家讨论)
- 关于用户验证的问题?
- 帮看一下servlet里面打印表格的输出格式啊
- javax.servlet.UnavailableException: org/springframework/context/support/Abstract
就是服务器在发回信息时加"\r\n";
或者在客户端使用read()方法,然后自己判断是否读到行末;否则就会阻断在readLine()那里;