안드로이드 개발보드에 유선으로 자동IP를 잡아서 인터넷을 할수 있습니다.
안드로이드에서(클라이언트) 입력한 데이터가 PC의 서버에 입력이 되는 형태인데
스마트폰의 WiFi와 3G상에서는 잘 실행이 되는걸 확인했습니다만 개발보드에서는 실행이 않되는 군요.
무선과 유선의 전송방식이 다른 건가요?
가르쳐 주세요....
서버
Test03.jsp
<%@page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@page import="java.sql.*"%>
<%
request.setCharacterEncoding("EUC-KR");
String id = request.getParameter("id");
String pword = request.getParameter("pword");
String title = request.getParameter("title");
String subject = request.getParameter("subject");
// System.out.println(id + "," + pword + "," + title + "," + subject);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://xxx.xxx.xxx.xxx;DatabaseName=cst";
Boolean connect = false;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "id", "password");
connect = true;
stmt = conn.createStatement();
String query = String.format("insert into test values('%s','%s','%s','%s')", id, pword, title, subject);
int cnt = stmt.executeUpdate(query);
stmt = conn.createStatement();
String query2 = String.format("select * from test");
rs = stmt.executeQuery(query2);
if (rs.next()){
do{
id = rs.getString("id");
pword = rs.getString("pword");
title = rs.getString("title");
subject = rs.getString("subject");
out.print(id + ", ");
out.print(pword + ", ");
out.print(title + ", ");
out.print(subject);
out.println();
}while(rs.next());
}else{
out.println("no data");
}
conn.close();
} catch (Exception e) {
connect = false;
e.printStackTrace();
} finally {
try {
if (stmt != null)
stmt.close();
} catch (Exception ignored) {}
try {
if (conn != null)
conn.close();
} catch (Exception ignored) {}
}
%>
클라이언트
Test01Activity.java
package dit.ac.kr;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;
public class Test01Activity extends Activity {
/** Called when the activity is first created. */
String myId,myPWord,myTitle,mySubject,myResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabs=(TabHost)findViewById(R.id.tabhost);
tabs.setup();
tabs.addTab(tabs.newTabSpec("tab_1").setIndicator("서버로전송").setContent(R.id.page01));
tabs.addTab(tabs.newTabSpec("tab_2").setIndicator("서버에서받음").setContent(R.id.page02));
findViewById(R.id.button_submit ).setOnClickListener(buttonClick);
}
Button.OnClickListener buttonClick = new Button.OnClickListener(){
public void onClick(View v){
myId = ((EditText)(findViewById(R.id.edit_Id))).getText().toString();
myPWord = ((EditText)(findViewById(R.id.edit_pword))).getText().toString();
myTitle = ((EditText)(findViewById(R.id.edit_title))).getText().toString();
mySubject = ((EditText)(findViewById(R.id.edit_subject))).getText().toString();
HttpPostData();
}
};
public void HttpPostData(){
try{
URL url = new URL("http://xxx.xxx.xxx.xxx/Test02/test03.jsp);
HttpURLConnection http=(HttpURLConnection) url.openConnection();
http.setDefaultUseCaches(false);
http.setDoInput(true);
http.setDoOutput(true);
http.setRequestMethod("POST");
http.setRequestProperty("content-type", "application/x-www-form-urlencoded");
StringBuffer buffer = new StringBuffer();
buffer.append("id").append("=").append(myId).append("&");
buffer.append("pword").append("=").append(myPWord).append("&");
buffer.append("title").append("=").append(myTitle).append("&");
buffer.append("subject").append("=").append(mySubject);
OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(),"EUC-KR");
PrintWriter writer = new PrintWriter(outStream);
writer.write(buffer.toString());
writer.flush();
Toast.makeText(Test01Activity.this,"전송 후 결과 받음",0).show();
InputStreamReader tmp = new InputStreamReader(http.getInputStream(),"EUC-KR");
BufferedReader reader = new BufferedReader(tmp);
StringBuilder builder = new StringBuilder();
String str;
while((str=reader.readLine())!=null){
builder.append(str+"\n");
}
myResult = builder.toString();
((TextView)(findViewById(R.id.text_result))).setText(myResult);
}catch(MalformedURLException e){
}catch(IOException e){
}
}
}
<uses-permission android:name="android.permission.INTERNET" >추가 했습니다.
스마트폰에서 올바르게 동작하신다고 하셨으니 코드 자체는 문제가 없을 것으로 생각이 됩니다.(제가 jsp를 몰라서 때우는거 아닙니다!!! ㅎㅎㅎ ^^;;) 다만 보드에서 동작하지 않으신다고 하시니 보드에 올라가있는 통신모듈이나 안드로이드쪽의 통신 부분이 다르게 동작을하기 때문에 발생하는 문제인 것 같습니다. 어디서 보드가 다르게 동작을 하는지 파악을 하는 것이 문제점을 해결할 수 있는 방법으로 보입니다.
안드로이드쪽 코드를 보니 아래의 함수에서 API들을 수행한 뒤 에러를 검사하지 않으시네요. 게다가 exception부분까지 다 먹어버리도록 작성을 해놓으셨네요. :(
일단 아래 제가 주석을 달아주는 부분들에 대해서 에러처리 및 exception이 발생하는 에러를 출력을 하도록 코드를 고치신 뒤 개발 보드에서 돌려보시면 에러로그가 뜰 것입니다. 에러로그를 보시면 무엇이 에러인지 확실히 알 수 있을 것 입니다.
public void HttpPostData(){
try{
URL url = new URL("http://xxx.xxx.xxx.xxx/Test02/test03.jsp);
HttpURLConnection http=(HttpURLConnection) url.openConnection();
//http가 올바르게 열렸는지 확인합니다. 연결이 올바르지 않을 경우에 대한 에러를 처리합니다.
http.setDefaultUseCaches(false);
http.setDoInput(true);
http.setDoOutput(true);
http.setRequestMethod("POST");
http.setRequestProperty("content-type", "application/x-www-form-urlencoded");
StringBuffer buffer = new StringBuffer();
buffer.append("id").append("=").append(myId).append("&");
buffer.append("pword").append("=").append(myPWord).append("&");
buffer.append("title").append("=").append(myTitle).append("&");
buffer.append("subject").append("=").append(mySubject);
OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(),"EUC-KR");
PrintWriter writer = new PrintWriter(outStream);
writer.write(buffer.toString());
writer.flush();
Toast.makeText(Test01Activity.this,"전송 후 결과 받음",0).show();
InputStreamReader tmp = new InputStreamReader(http.getInputStream(),"EUC-KR");
BufferedReader reader = new BufferedReader(tmp);
StringBuilder builder = new StringBuilder();
String str;
while((str=reader.readLine())!=null){
builder.append(str+"\n");
}
myResult = builder.toString();
((TextView)(findViewById(R.id.text_result))).setText(myResult);
}catch(MalformedURLException e){
//e.getMessage()의 내용을 출력해봅니다.
}catch(IOException e){
//e.getMessage()의 내용을 출력해봅니다.
} catch(Exception e) {
//위의 두 경우가 아닌 에러에 대해서 대비를 하기 위해서 Exception처리를 함께 넣습니다.
//e.getMessage()의 내용을 출력해봅니다.
}
}
아니요. 기본적으로 TCP/IP를 기반의 통신이고 안드로이드 어플리케이션 레벨 수준에서 살펴본다면 무선/유선의 구분이 없습니다.
그러므로 생각하시는 문제가 원인이 아닐 것 같습니다.
데이터가 가지 않을 때 에러로그를 보시거나 에러 로그가 없다면 서버/클라이언트 코드를 올려주시면 원인을 알 수 있을 것 같습니다.