C#, MySQL DB, 유니티 연동 질문입니다 도와주세요 ㅜ!

조회수 3735회

안녕하세요.

지금 막 게임 코딩에 입문한 초심자 입니다.

제가 이번에 youtube 동영상을 보면서 unity 로그인 시스템을 C#과 MySQL DB로 만들고 있었습니다.

동영상에서는 정상적으로 작동하는데 왜 제꺼에서는 작동이 안되는지 모르겠습니다.ㅠㅠ

제가 코드를 살짝 분석해보았는데 이부분이 약간 문제가 있는게 아닌가 추측을 해보았습니다. 보고 판단해주시면 감사하겠습니다.

제가 유니티 로그인창에 ID와 비밀번호를 입력하면

private void logInAccount(string userName, string p)
    {
        scObject data = new scObject("loginInfo");
        data.addString("username", userName);
        string nPass = calculateMD5Hash(p);//비밀번호 암호화
        data.addString("pass", p);
        message mes = new message("login");
        mes.addSCObject(data);
        SendServerMessage(mes);
    }

유니티 로그인 스크립트에서 제가 입력한 정보를 TCP서버로 보냅니다.

public void handleClientData(Socket cSock, message incObject)
    {

        switch(incObject.messageText)
        {
            case "login":
                message newMessage = new message("loginResponse");
                if (playerTools.checkLogin(incObject.getSCObject(0).getString("username"), incObject.getSCObject(0).getString("pass")))
                {
                    scObject data = new scObject("data");
                    data.addBool("response", true);
                    newMessage.addSCObject(data);
                }
                else
                {
                    scObject data = new scObject("data");
                    data.addBool("response", false);
                    newMessage.addSCObject(data);
                }
                sendClientMessage(cSock, newMessage);
                break;
            default:
                output.outToScreen("The client sent a message: " + incObject.messageText);
                break;
        }
    }

여기서 유니티에서 보낸 login메세지를 받아고 아이디와 비밀번호를 checkLogin으로 보냅니다.

  public static bool checkLogin(string username, string pass)
    {
        MySqlConnection con = database.getConnection();
        MySqlCommand cmd = con.CreateCommand();
        cmd.CommandText = "SELECT * FROM accounts WHERE account = '" + username + "' AND password = '" + pass + "' LIMIT 1;";
        MySqlDataReader reader;
        output.outToScreen("" + cmd.CommandText); //추가 부분
        bool result = false;

        try
        {
            con.Open();
            //output.outToScreen("MySQL 열기");
            reader = cmd.ExecuteReader();
            reader.Read();
            if (reader.GetInt32("id") > 0) 
            {
                result = true;
            }
            con.Close();
        }
        catch
        {
            con.Close();
            //output.outToScreen("MySQL 닫기");
        }
        return result;
    }

제가 생각하기에 checkLogin이 정상적으로 작동하지 않는것같습니다. 3일째 계속 코드보고 구글링도 해보고 하는데 도저히 답을 못찾겠습니다. 고수님들 도와주시면 감사하겠습니다 !!

이 다음 과정까지 보여드리겠습니다.

    switch (mes.messageText)
    {
        case "loginResponse":
            Debug.Log(""+ mes.getSCObject(0).getBool("response"));//
            Debug.Log("The login response returned: " + (mes.getSCObject(0).getBool("response") ?             
                                 "correct." : "not correct."));
            break;
        default:
            Debug.Log("The server sent a message: " + mes.messageText);
            break;
    }

이 부분에서 TCP서버에서 보낸 로그인 정보가 참인지 거짓인지를 받아서 client에 보여주는 부분인데 뭘해도 계속 false가 뜹니다. ㅠㅠ

(P.S 제가 DB를 잘못만든거 일수도 있으니 DB사진 같이 첨부하겠습니다.)이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 디버거로 디버깅은 해보셨어요?

    개발자는 추측으로 결과를 내면 곤란합니다. 데이터 즉 근거로 이야기 해야 합니다.

    일단 주어진 데이터로는 안되는 이유를 알기가 어렵습니다.

    다만 checkLogin 메소드가 안된다고 한다면 의심이 갈만한 것은 한가지 입니다.

    ado.net 으로 mysql 접속은 되시는지 여부입니다.

    mysql 이 기본적으로 리모트 연결이 막혀있습니다.

    우선 ado.net 으로 mysql 커넥션이 되는지 확인해보세요.

    • 역시 내공이 너무 부족한것 같습니다. ㅠ ㅠ 일단 말씀해주신 ado.net에 접속을 해보았지만 접속이 안됩니다.. 더 공부를 하고 뭔가를 시작해야할것 같습니다 ㅠ 답변 달아주셔서 정말 감사합니다.!!!! 알 수 없는 사용자 2017.8.13 15:12

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)