C#, MySQL DB, 유니티 연동 질문입니다 도와주세요 ㅜ!
조회수 3771회
안녕하세요.
지금 막 게임 코딩에 입문한 초심자 입니다.
제가 이번에 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
댓글 입력