now i'm making chatting program.
but there are some problems.
first, in login process, when i send the id/pw to server, server sends that is right or wrong (protocol 3000 or 3001). then, client will get the protocol. and
islogin(boolean)
will changed true or false. however, the boolean value is not changed. i don't know why it is not changed. there are some codes.
clientbackground.java
package client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.StringTokenizer;
import crypto.des;
public class ClientBackground implements Runnable{
Socket socket;
DataInputStream in;
private DataOutputStream out;
private ClientGui gui;
private String msg;
String id;
private String pass;
private boolean islogin;
private login_Frame lf;
private regform rf;
private String info;
Thread clientThread;
des crypto;
String packet="";
String tmp;
boolean test = false;
int protocol;
public final void setGui(ClientGui gui) {
this.gui = gui;
}
public void run() {
try {
socket = new Socket("192.168.0.11", 7770);
System.out.println("connect!.");
socket.setTcpNoDelay(true);
crypto = new des();
//crypto.SetD();
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
System.out.println(in.available()); //test
System.out.println("okay!");
while (in != null) {
packet = in.readUTF();
StringTokenizer st = new StringTokenizer(packet,"/");
tmp = st.nextToken();
msg = st.nextToken();
this.protocol = Integer.parseInt(tmp);
System.out.println(this.protocol+"&&&&"); //test
switch(this.protocol){
case 3000 :{
System.out.println("success");
test = true;
this.lf.gettest(test);
}
break;
case 3001 :{
System.out.println("wrong");
test = false;
this.lf.gettest(test);
}
break;
default :{
gui.jta.append(msg);
System.out.println(msg);
System.out.println(test+"%%");
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/*public void loginP() {
System.out.println(this.protocol+"&&&&");
switch(this.protocol){
case 3000 :{
System.out.println("success");
test = true;
this.lf.gettest(test);
}
break;
case 3001 :{
System.out.println("wrong!");
test = false;
this.lf.gettest(test);
}
break;
}
}*/
public static void main(String[] args){
ClientBackground clientBackground = new ClientBackground();
Thread clientThread = new Thread(clientBackground);
clientThread.setPriority(1);
clientThread.start();
clientBackground.lf = new login_Frame();
clientBackground.lf.Clientback(clientBackground);
}
public void showFrameTest() {
this.lf.setVisible(false);
this.gui = new ClientGui();
this.gui.Clientback(this);
}
public void showregfrom() {
this.lf.setVisible(false);
this.rf = new regform();
this.rf.Clientbackreg(this);
}
public void relogin_form() {
this.rf.dispose();
this.lf.setVisible(true);
}
public void sendMessage(String msg2) {
try {
out.writeUTF(msg2);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean lcheck() {
return islogin;
}
public void setid(String id, String pass) {
this.id = id;
this.pass = pass;
}
public String getid() {
return id;
}
}
login_Frame.java
package client;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.NoSuchPaddingException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import crypto.des;
public class login_Frame extends JFrame{
private static final long serialVersionUID = 1L;
private String id;
private String pass;
JButton logb = new JButton("login");
JButton exitb = new JButton("cancel");
JButton regb = new JButton("reg");
JLabel idlb = new JLabel("ID : ");
JLabel pwlb = new JLabel("PW : ");
JTextField idtb = new JTextField();
JTextField pwtb = new JTextField();
private static ClientBackground client;
private DataInputStream in;
byte[] CpStr = null;
boolean test = false;
String packet,tmp;
public login_Frame(){
new Thread(client).start();
getContentPane().add(logb);
getContentPane().add(exitb);
getContentPane().add(regb);
getContentPane().add(idlb);
getContentPane().add(pwlb);
getContentPane().add(idtb);
getContentPane().add(pwtb);
setLayout(null);
setBounds(100, 100, 400, 200);
setVisible(true);
logb.setBounds(40, 110, 90, 40);
exitb.setBounds(150, 110, 90, 40);
regb.setBounds(260, 110, 90, 40);
idlb.setBounds(20, 10, 50, 40);
pwlb.setBounds(20, 60, 50, 40);
idtb.setBounds(70, 10, 280, 40);
pwtb.setBounds(70, 60, 280, 40);
ActionListener confirmListener = new ConfirmListener();
ActionListener exListener = new ExitListener();
ActionListener regListener = new RegListener();
logb.addActionListener(confirmListener);
exitb.addActionListener(exListener);
regb.addActionListener(regListener);
idtb.addActionListener(confirmListener);
pwtb.addActionListener(confirmListener);
}
public String getidtb(){
return idtb.getText();
}
public String getpwtb(){
return pwtb.getText();
}
private class ConfirmListener implements ActionListener {
public void actionPerformed(ActionEvent e){
try {
isLoginCheck();
System.out.println(test); //test
if(client.test){
System.out.println(client.test+"%%%%"); //test
client.showFrameTest();
}
else{
JOptionPane.showMessageDialog(null, "wrong!");
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
private class RegListener implements ActionListener {
public void actionPerformed(ActionEvent e){
regbtaction();
}
}
private class ExitListener implements ActionListener {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public void Clientback(ClientBackground client) {
this.client = client;
}
public void isLoginCheck() throws Exception{
id = getidtb();
pass = getpwtb();
new Thread(client).start();
//CpStr = client.crypto.Encrypts(pass);
idtb.setText("");
pwtb.setText("");
client.setid(id, pass);
client.sendMessage("3004"+"/"+id+"/"+pass);
}
public void regbtaction() {
client.showregfrom();
this.setVisible(false);
}
public void gettest(boolean test) {
this.test = test;
}
}
I edit some codes and add some test codes to verify the login processing. Now, if I execute my program and click the login button, wrong message is appeared. But some test codes teach me something. connect!.
0
okay!
connect!.
0
okay!
false
3000&&&&
success
This is clientBackground's commend. Especially, 3000&&&&
and success
It means that clientBackground received correct protocol. Then, it edit its test boolean(true). But here are some problem. I want that when I click the login button, isLoginCheck
will be executed, then test boolean have to changed. However, if(client.test){
execute ahead. I want change processing order. How to change the order..?
@Lothar plz help me.