전체적인 기능 구현

1. 서버 실행

2. 클라이언트 실행

3. 회원가입이 필요한 경우 회원가입

4. 가입이 완료되면 로그인

비밀번호 까지 작성이 되야 로그인 버튼이 활성화

5. 로그인 완료

6. 대기실에 실시간 로그인 및 다중채팅

7. 방만들기


방에서는 귓속말기능이 없고 채팅만 가능하다 

파일로 채팅의 내용을 저장과 불러오기를 할 수있다.

나가기 버튼 클릭시 방삭제 할지 확인 창이 뜨는데 이때 채팅방안에 사람이 있는경우 삭제가 되지않으며

다시 들어가서 삭제버튼 누를시에 잘안되는 경우도 있다.....(도데체 왜때문이지..?)

들어와 있는 모든사람이 확인버튼을 클릭하거나 처음 방을 만든사람이 아무도없는 것을 확인하고 삭제해야 가능한 기능이다.

8. 회원 정보 수정

여기서 정보를 수정할 수 있다.

db에서 확인한다

이름인 '사랑'을 '이름'으로 변경 후

변경 된 것이 확인이 가능하다.

아래에 탈퇴기능 또한 있다.

9. 탈퇴

ka의 회원정보를 탈퇴하려 한다.

종료됨과 함께 db에서도 삭제됨을 확인 할 수있다.

10. 프로그램 정보



'* Project > Chatting_Pro' 카테고리의 다른 글

서버  (0) 2016.09.07
대기화면 소스(WaitRoomUI.java)  (0) 2016.09.07
회원 수정 DB / 회원 탈퇴 DB  (1) 2016.09.07
로그인 체크 DB  (1) 2016.09.07
회원가입 DB / 메시지박스  (1) 2016.09.07

서버 소스이다.

포트번호를 설정을한다. (기존의 사용하는 포트번호와 겹치지 않게 조심!)

스트림 객체 생성하고 스레드 시작한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
 
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
 
// To create UI and listen to client access
public class EightServer extends JFrame implements Runnable {
 
    static final int PORT = 8880// 서버프로그램의 포트번호
    Socket socket;
    ServerSocket serverSocket; // 서버소켓
    DataOutputStream dos;
    DataInputStream dis;
    ArrayList<User> userArray; // 서버에 접속한 사용자들
    ArrayList<Room> roomArray; // 서버가 열어놓은 채팅방들
 
    int sizeX = 600, sizeY = 600;
    Dimension whole, part;
    int xPos, yPos;
    JTextArea jta;
    ImageIcon icon;
    JPanel jp;
 
    EightServer() {
        userArray = new ArrayList<User>();
        roomArray = new ArrayList<Room>();
        setTitle("Octopus Server");
        setSize(sizeX, sizeY);
 
        icon = new ImageIcon("icon2.png");
        this.setIconImage(icon.getImage());//타이틀바에 이미지넣기
        
        jta = new JTextArea();
        jp = new JPanel();
 
        jp.setLayout(new GridLayout(12)); // 그리드 레이아웃
        jta.setEditable(false); // 에디팅 불가
        jta.setLineWrap(true); // 자동줄바꿈
 
        JScrollPane jsp = new JScrollPane(jta); // 텍스트에어리어에 스크롤 추가
        jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        jp.add(jsp);// 패널에 스크롤 붙임
        jta.setText("Server Start...1\n");
 
        add(jp); // 프레임에 패널 붙임
 
        // 윈도우 위치 계산
        whole = Toolkit.getDefaultToolkit().getScreenSize();
        part = this.getSize();
        xPos = (int) (whole.getWidth() / 2 - part.getWidth() / 2);
        yPos = (int) (whole.getHeight() / 2 - part.getHeight() / 2);
 
        setLocation(xPos, yPos);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
 
    public static void main(String[] args) {
        // Create server UI
        System.out.println("Server start...2");
        EightServer server = new EightServer();
        Thread thread = new Thread(server);
        thread.start();
    }
 
    @Override
    public void run() {
        // 클라이언트 대기 모드
 
        // 서버소켓 생성
        try {
            InetAddress addr = InetAddress.getLocalHost(); // 로컬호스트 주소
            serverSocket = new ServerSocket(PORT); // 서버소켓 생성
            jta.append(PORT + "번 포트로 정상적으로 소켓이 생성되었습니다.\n" + "현재 열린 서버의 IP 주소는 " 
                            + addr.getHostAddress().toString() + "입니다. \n");
        } catch (IOException e1) {
            e1.printStackTrace();
            jta.append("서버 소켓 생성에러\n");
        }
 
        while (true) {
            socket = null;
            dis = null;
            dos = null;
            try {
                // 무한반복, 입출력 에러가 나거나 프로그램이 종료될 때까지 실행
                socket = serverSocket.accept(); // 클라이언트 접속 대기
                jta.append("클라이언트 " + socket.getInetAddress().getHostAddress()    + "가 접속되었습니다.\n");
 
            } catch (IOException e) {
                e.printStackTrace();
                try {
                    socket.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                jta.append("클라이언트 접속에러\n");
            }
            try {
                // 스트림 객체 생성
                dis = new DataInputStream(socket.getInputStream());
                dos = new DataOutputStream(socket.getOutputStream());
            } catch (IOException e) {
                e.printStackTrace();
                try {
                    dis.close();
                    dos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                    jta.append("스트림 해제에러\n");
                }
                try {
                    socket.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                    jta.append("소켓 해제에러\n");
                }
                jta.append("스트림 생성에러\n");
            }
            User person = new User(dis, dos); // 가명의 사용자 객체 생성
            person.setIP(socket.getInetAddress().getHostName()); // 아이피주소 설정 부여
 
            Thread thread = new Thread(new ServerThread(jta, person, userArray,    roomArray));
            thread.start(); // 스레드 시작
        }
    }
}
cs


이러한 창을 띄워 잘못되는점이나 오류를 확인하게 하였다.

'* Project > Chatting_Pro' 카테고리의 다른 글

채팅 프로그램 마무리  (0) 2016.09.07
대기화면 소스(WaitRoomUI.java)  (0) 2016.09.07
회원 수정 DB / 회원 탈퇴 DB  (1) 2016.09.07
로그인 체크 DB  (1) 2016.09.07
회원가입 DB / 메시지박스  (1) 2016.09.07

로그인을 하면 이러한 대기화면이 나온다.

오른쪽에는 참여자가 실시간으로 올라오며 , 위에 메뉴바도 존재한다. 

메뉴바에는 파일로 저장하는 것과 회원 정보 수정 및 탈퇴버튼이 있고, 해당 프로그램의 정보가 있는 도움말이 있다.

방을 만들어 따로 채팅이 가능하며, 대기실에서 바로 채팅이 가능하다. 또한 참여자를 선택후 귓속말을 클릭하면 태그가 되어 

그사람 한테만 나의 글이 보여진다.

이러한 이화면의 모든 기능들을 담은 소스가 WaitRoomUI.java 이다.


이소스는 이전의 모든 파일에 포함되어 있는 파일이다.

WaitRoomUI.java


버튼의 이벤트가 이부분이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    @Override
    public void actionPerformed(ActionEvent e) {
        id = client.user.getId();
        switch (e.getActionCommand()) {
        case "귓속말":
            // 닉네임 제외하고 아이디만 따옴
            StringTokenizer token = new StringTokenizer(currentSelectedTreeNode, "("); // 토큰 생성
            temp = token.nextToken(); // 토큰으로 분리된 스트링
            temp = token.nextToken();
            id = "/" + temp.substring(0, temp.length() - 1+ " ";
            chatField.setText(id);
            chatField.requestFocus();
            break;
        // 메뉴1 파일 메뉴
        case "회원정보 변경":
            DBRevise reDB = new DBRevise();
            reDB.myInfo(id);
            break;
        case "회원 탈퇴":
            DBDelete delDB = new DBDelete();
 
            int ans = JOptionPane.showConfirmDialog(this"정말 탈퇴 하시겠습니까?""탈퇴확인", JOptionPane.OK_CANCEL_OPTION);
 
            if (ans == 0) {
                int i = 0;
                i = delDB.InfoDel(id);
                if (i == 0) {
                    // msgbox.messageBox(this, "탈퇴는 신중히..:)");
                } else {
                    msgbox.messageBox(this"탈퇴 성공하였습니다..:(");
                    exit01();
                }
            }
            break;
        case "종료":
            int ans1 = JOptionPane.showConfirmDialog(this"정말 종료 하시겠습니까?""종료확인", JOptionPane.OK_CANCEL_OPTION);
            if (ans1 == 0) {
                // System.exit(0); // 강제 종료
                try {
                    client.getUser().getDos().writeUTF(User.LOGOUT);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            break;
        case "파일로저장":
            String filename = UtilFileIO.saveFile(waitRoomArea);
            JOptionPane.showMessageDialog(waitRoomArea.getParent(), "채팅내용을 파일명(" + filename + ")으로 저장하였습니다""채팅백업", JOptionPane.INFORMATION_MESSAGE);
            break;
        case "파일열기":
            filename = UtilFileIO.getFilenameFromFileOpenDialog("./");
            if (filename == ""break;
            String text = UtilFileIO.loadFile(filename);
            TextViewUI textview = new TextViewUI(text);
            break;
        case "프로그램 정보":
            maker();
            break;
        }
    }



cs


메시지 전송되는 소스이다

전체 채팅, 귓속말 채팅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    private void msgSummit() {
        String string = chatField.getText();// 메시지전송
        if (!string.equals("")) {
            if (string.substring(01).equals("/")) {
                
                StringTokenizer token = new StringTokenizer(string, " "); // 토큰 생성
                String id = token.nextToken(); // 토큰으로 분리된 스트링
                String msg = token.nextToken();
                
                try {
                    client.getDos().writeUTF(User.WHISPER + id + "/" + msg);
                    waitRoomArea.append(id + "님에게 귓속말 : " + msg + "\n");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                chatField.setText("");
            } else {
 
                try {
                    // 대기실에 메시지 보냄
                    client.getDos().writeUTF(User.ECHO01 + "/" + string);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                chatField.setText("");
            }
        }
    }
cs


채팅방을 생성할 시 채팅방의 이름을 작성할 수있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    private void createRoom() {
        String roomname = JOptionPane.showInputDialog("대화방 이름을 입력하세요~");////////////
        if(roomname==null) {    // 취소 버튼
            
        } else {
            Room newRoom = new Room(roomname);    // 방 객체 생성
            newRoom.setRoomNum(lastRoomNum);
            newRoom.setrUI(new RoomUI(client, newRoom));
            
            // 클라이언트가 접속한 방 목록에 추가
            client.getUser().getRoomArray().add(newRoom);
            
            try {
                client.getDos().writeUTF(User.CREATE_ROOM + "/" + newRoom.toProtocol());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
cs


JOptionPane 을 사용하면 좀더 편리하게 알림창을 사용할 수있다.

'* Project > Chatting_Pro' 카테고리의 다른 글

채팅 프로그램 마무리  (0) 2016.09.07
서버  (0) 2016.09.07
회원 수정 DB / 회원 탈퇴 DB  (1) 2016.09.07
로그인 체크 DB  (1) 2016.09.07
회원가입 DB / 메시지박스  (1) 2016.09.07

로그인을 하고 다음 대기화면(WaitRoomUI.java)에서의 메뉴바에 회원 수정과 탈퇴 기능을 추가하였다.

회원수정하는 것 또한 새로운 창이 필요하여 이렇게 만들어봤다.

id는 변경이 불가능하게 하였고, pw와 이름 생년월일을 수정하여 db에 다시 저장한다.


화면 만드는 것을 포함한 전체 소스이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class DBRevise implements MouseListener {
 
    String id = null;
    String pw, name, birth;
 
    JFrame frame;
    JPanel logPanel;
    JPanel logPanel1;
    JPanel logPanel2;
    JPanel logPanel3;
    JTextField idTf, pwTf, nameTf, birthTf = null;
    JButton okBtn;
 
    MsgeBox msgbox = new MsgeBox();
 
    Statement stmt = null;
    ResultSet rs = null;
    String url = "jdbc:oracle:thin:@203.236.209.197:1521:xe"// 오라클 포트번호1521/@이후에는 IP주소
    String sql = null;
    String sql2 = null;
    Properties info = null;
    Connection cnn = null;
 
    // id를 받아와서 그것의 정보로 pw/name/barth 수정및 삭제
    void myInfo(String id) {
        this.id = id;
 
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver"); // 알아서 conn으로 연결
            info = new Properties();
            info.setProperty("user""scott");
            info.setProperty("password""tiger");
            cnn = DriverManager.getConnection(url, info); // 연결할 정보를 가지고있는 드라이버매니저를 던진다
            stmt = cnn.createStatement();
 
            sql = "select * from joinDB where id='" + id + "'";
            rs = stmt.executeQuery(sql);
 
            while (rs.next() == true) { // 다음값의
                pw = rs.getString(2);
                name = rs.getString(3);
                birth = rs.getString(4);
            }
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
 
        frame = new JFrame("회원수정");
        logPanel = new JPanel();
        logPanel1 = new JPanel(new GridLayout(41));
        logPanel2 = new JPanel(new GridLayout(41));
        logPanel3 = new JPanel();
 
        JLabel idLabel = new JLabel(" I   D   ", JLabel.CENTER);
        JLabel pwLabel = new JLabel(" P  W  ", JLabel.CENTER);
        JLabel nameLabel = new JLabel("이 름", JLabel.CENTER);
        JLabel baLabel = new JLabel("생 년 월 일 ", JLabel.CENTER);
        logPanel1.add(idLabel);
        logPanel1.add(pwLabel);
        logPanel1.add(nameLabel);
        logPanel1.add(baLabel);
 
        idTf = new JTextField(20);
        idTf.setText(id);
        idTf.setEditable(false);
        pwTf = new JTextField(20);
        pwTf.setText(pw);
        nameTf = new JTextField(20);
        nameTf.setText(name);
        birthTf = new JTextField(20);
        birthTf.setText(birth);
        logPanel2.add(idTf);
        logPanel2.add(pwTf);
        logPanel2.add(nameTf);
        logPanel2.add(birthTf);
 
        frame.add(logPanel, BorderLayout.NORTH);
        frame.add(logPanel1, BorderLayout.WEST);
        frame.add(logPanel2, BorderLayout.CENTER);
        frame.add(logPanel3, BorderLayout.EAST);
 
        JPanel logPanel4 = new JPanel();
        JLabel askLabel = new JLabel("변경하시겠습니까?");
        okBtn = new JButton("확인");
        JButton cancleBtn = new JButton("취소");
        okBtn.addMouseListener(this);         // addMouseListener이벤트
        logPanel4.add(askLabel);
        logPanel4.add(okBtn);
        logPanel4.add(cancleBtn);
        frame.add(logPanel4, BorderLayout.SOUTH);
 
        // 취소 버튼
        cancleBtn.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                frame.dispose();
                dbClose();
            }
        });
 
        frame.setBounds(450250350200);
        frame.setResizable(false);
        frame.setVisible(true);
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        try {
            // 확인 버튼
            if (e.getSource().equals(okBtn)) {
                if ((idTf.getText().isEmpty()) == true || (pwTf.getText().isEmpty()) == true
                        || (nameTf.getText().isEmpty()) || (birthTf.getText().isEmpty())) {
                    msgbox.messageBox(logPanel3, "비어있는 칸이 존재합니다.");
                } else if ((birthTf.getText().length()) != 6) {
                    msgbox.messageBox(logPanel3, "생년월일 서식이 잘못되었습니다."); // 아닌경우
                } else {
                    sql = "update joinDB set pw='" + pwTf.getText() + "',name='" + nameTf.getText() + "',birth='"
                            + birthTf.getText() + "' where id='" + id + "'";
                    System.out.println(sql);
                    stmt.executeUpdate(sql);
                    msgbox.messageBox(logPanel3, "변경 되셨습니다.");
                    frame.dispose(); // 창 닫기
                    dbClose();
                }
            }
 
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
    }
    @Override
    public void mouseReleased(MouseEvent e) {
    }
    @Override
    public void mouseEntered(MouseEvent e) {
    }
    @Override
    public void mouseExited(MouseEvent e) {
    }
    public void dbClose() {
        try {
            if (rs != null)
                rs.close();
            if (stmt != null)
                stmt.close();
            if (cnn != null)
                cnn.close();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
}
cs

현재 로그인된 아이디를 가져와서 db에서 찾아 나머지 내용을 불러오고,

변경된 것을 다시 저장하는 것이다.

이역시 비어있는 칸이 있어선 안되며 생년월일의 서식도 맞아야한다.


다음은 탈퇴하는 소스를 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import java.util.Scanner;
 
public class DBDelete {
    MsgeBox msgbox = new MsgeBox();
 
    String id = null;
 
    Statement stmt = null;
    ResultSet rs = null;
    String url = "jdbc:oracle:thin:@203.236.209.197:1521:xe"// 오라클 포트번호1521/@이후에는 IP주소
    String sql = null;
    String sql2 = null;
    Properties info = null;
    Connection cnn = null;
 
    // id를 받아와서 그것의 정보로 pw/name/birth 삭제
    int InfoDel(String id) {
        int result = 0;
        this.id = id;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver"); // 알아서 들어간다..conn로
            info = new Properties();
            info.setProperty("user""scott");
            info.setProperty("password""tiger");
            cnn = DriverManager.getConnection(url, info); // 연결할 정보를 가지고있는 드라이버매니저를 던진다
            stmt = cnn.createStatement();
 
            sql = "delete from joinDB where id='" + id + "'";
            stmt.executeUpdate(sql);
 
            sql = "select * from joinDB where id='" + id + "'";
            rs = stmt.executeQuery(sql);
            if (rs.next() == true) { // 다음값의
                result = 0// 실패
            } else {
                result = 1// 성공
            }
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
 
        return result;
    }
 
}
cs


'* Project > Chatting_Pro' 카테고리의 다른 글

서버  (0) 2016.09.07
대기화면 소스(WaitRoomUI.java)  (0) 2016.09.07
로그인 체크 DB  (1) 2016.09.07
회원가입 DB / 메시지박스  (1) 2016.09.07
전체 파일  (0) 2016.09.07

회원가입이 완료되었으면 축하한다는 메시지와 함께 로그인페이지로 다시 넘어간다.

로그인을 하기위해서는 DB안의 나의 정보와 일치하는지 확인이 필요하다.

그 확인을 위한 소스이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
 
public class DBLogin {
 
    String id = null;
    String pw = null;
 
    Statement stmt = null;
    ResultSet rs = null;
    String url = "jdbc:oracle:thin:@203.236.209.197:1521:xe"// 오라클 포트번호1521/@이후에는 IP주소
    String sql = null;
    Properties info = null;
    Connection cnn = null;
 
    int checkIDPW(String id, String pw) {
        this.id = id;
        this.pw = pw;
        int result = 1;
 
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver"); // 알아서 들어간다..conn로
            info = new Properties();
            info.setProperty("user""scott");
            info.setProperty("password""tiger");
            cnn = DriverManager.getConnection(url, info); // 연결할 정보를 가지고있는 드라이버매니저를 던진다
            stmt = cnn.createStatement();
 
            sql = "select * from joinDB where id='" + id + "'";
            rs = stmt.executeQuery(sql); // 읽어오는거라 다르다 비교해    //리턴타입이 ResultSet
 
            if (rs.next() == false || (id.isEmpty()) == true) { // id가 존재x
                result = 1;
            } else {
                sql = "select * from (select * from joinDB where id='" + id + "')";
                rs = stmt.executeQuery(sql);
                while (rs.next() == true) {         // 다음값의
                    if (rs.getString(2).equals(pw)) { // pw와 같은지 비교
                        result = 0;         // 같으면 로그인 성공
                    } else {                // 아이디는같고 pw가 다른경우
                        result = 1;
                    }
                }
            }
        } catch (Exception ee) {
            System.out.println("문제있음");
            ee.printStackTrace();
        }
        return result;
    }
}
cs


id와 pw를 받아와서 데이터베이스에 연결하여 일치하는지를 검사하는 소스이다.

id와 pw가 일치하여 로그인에 성공하면 "0"을 리턴하고, 하나라도 잘못작성한경우 "1"을 리턴한다.

스레드 파일(ServerThread.java)에서 스레드를 생성함과 동시에 적용이되는 메소드이다.

스레드 파일에서의 소스를 보면 아래와 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    private void login(String id, String pw) {
        StringBuffer str = new StringBuffer();
        try {
 
            DBLogin logdb = new DBLogin();
            int result = logdb.checkIDPW(id, pw);
 
            if (result == 0) { // result가 0이면 성공
                for (int i = 0; i < userArray.size(); i++) {
                    if (id.equals(userArray.get(i).getId())) {
                        try {
                            System.out.println("접속중");
                            thisUser.writeUTF(User.LOGIN + "/fail/이미 접속 중입니다.");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        return;
                    }
                }
                // 로그인 OK
                user.setId(id);
                user.setPw(pw);
                user.setNickName(id);
                thisUser.writeUTF(User.LOGIN + "/OK/" + user.getNickName());
                this.user.setOnline(true);
 
                // 대기실에 에코
                echoMsg(User.ECHO01 + "/" + user.toString() + "님이 입장하셨습니다.");
                jta.append(id + " : 님이 입장하셨습니다.\n");
 
                roomList(thisUser);
                for (int i = 0; i < userArray.size(); i++) {
                    userList(userArray.get(i).getDos());
                }
 
                jta.append("성공 : DB 읽기 : " + id);
            } else { // result가 1이면 실패
                thisUser.writeUTF(User.LOGIN + "/fail/아이디와 비밀번호를 확인해 주세요!");
            }
 
        } catch (Exception e) {
            try {
                thisUser.writeUTF(User.LOGIN + "/fail/아이디가 존재하지 않습니다!");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            jta.append("실패 : DB 읽기\n");
            return;
        }
 
    }
cs


리턴받은 값 (0혹은1) 을 받아서 if문 else문으로 성공과 실패를 나눠준다.

성공 시 대기창으로 이동하고 실패시 앞의 메세지 박스와는 다른 방법인

thisUser.writeUTF(User.LOGIN + "/fail/아이디와 비밀번호를 확인해 주세요!");

이것으로 알림을 준다.




'* Project > Chatting_Pro' 카테고리의 다른 글

서버  (0) 2016.09.07
대기화면 소스(WaitRoomUI.java)  (0) 2016.09.07
회원 수정 DB / 회원 탈퇴 DB  (1) 2016.09.07
회원가입 DB / 메시지박스  (1) 2016.09.07
전체 파일  (0) 2016.09.07

+ Recent posts