package
kr.soen.mythreadactivity;
import
java.io.BufferedReader;
import
java.io.DataInputStream;
import
java.io.DataOutputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.io.InputStreamReader;
import
java.io.OutputStreamWriter;
import
java.io.PrintWriter;
import
java.net.Socket;
import
java.io.BufferedWriter;
import
android.app.Activity;
import
android.os.Bundle;
import
android.os.Handler;
import
android.util.Log;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.TextView;
public
class
MyThreadActivity
extends
Activity {
TextView textView01;
Handler handler;
private
Socket socket;
public
static
String ip =
"localhost"
;
public
static
int
port =
30001
;
EditText edit, edit_ip, edit_port;
public
static
String msg;
public
static
boolean
Enable =
false
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
edit_ip = (EditText) findViewById(R.id.editText1);
edit_port = (EditText) findViewById(R.id.editText2);
edit = (EditText) findViewById(R.id.editText3);
textView01 = (TextView) findViewById(R.id.text);
Log.i(
"dsem_log"
,
"oncreate start"
);
Button button01 = (Button) findViewById(R.id.connect);
button01.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
Log.i(
"dsem_log"
,
"connect button clicked"
);
if
(Enable ==
false
) {
ip = edit_ip.getText().toString();
Log.i(
"dsem_log"
, ip);
port = Integer.parseInt(edit_port.getText().toString());
Log.i(
"dsem_log"
, String.valueOf(port));
connect();
Enable =
true
;
RequestThread rt =
new
RequestThread();
rt.start();
SendThread st =
new
SendThread();
st.start();
}
}
});
textView01 = (TextView) findViewById(R.id.text);
Button button02 = (Button) findViewById(R.id.exit);
button02.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
Enable =
false
;
try
{
socket.close();
Log.i(
"dsem_log"
,
"소켓 닫음"
);
}
catch
(IOException e) {
e.printStackTrace();
}
Log.i(
"dsem_log"
,
"무한루프 종료"
);
}
});
Button button03 = (Button) findViewById(R.id.send);
button03.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
String str = edit.getText().toString();
try
{
Log.i(
"dsem_log"
,
"두번째이상 클릭"
);
str = edit.getText().toString();
PrintWriter out =
new
PrintWriter(
new
BufferedWriter(
new
OutputStreamWriter(socket.getOutputStream(),
"MS949"
)),
true
);
out.println(str);
Log.i(
"dsem_log"
,
"보냄"
);
out.flush();
File f =
new
File(
"/storage/A212-21FF/11111.txt"
);
Log.i(
"dsem_log"
,
"파일생성함"
);
DataInputStream dis =
new
DataInputStream(
new
FileInputStream(f));
Log.i(
"dsem_log"
,
"파일길이 사이"
);
long
length = f.length();
Log.i(
"dsem_log"
,
"파일길이 재고"
);
DataOutputStream dos =
new
DataOutputStream(socket.getOutputStream());
byte
[] buf =
new
byte
[(
int
) length];
Log.i(
"dsem_log"
,
"실행"
);
Log.i(
"dsem_log"
,
""
+ length);
while
(dis.read(buf) >
0
) {
dos.write(buf,
0
,
9999
);
Log.i(
"dsem_log"
,
"보냄"
);
}
dos.flush();
dos.close();
}
catch
(IOException e) {
Log.i(
"dsem_log"
,
"두번째이상 클릭에서 오류"
);
}
}
});
handler =
new
Handler();
}
public
void
connect() {
Log.i(
"dsem_log"
, String.valueOf(Enable));
if
(Enable==
true
)
{
try
{
socket =
new
Socket(ip,port);
Log.i(
"dsem_log"
,
"서버열림"
);
}
catch
(Exception ex) {
Log.e(
"dsem_log"
, ex.getMessage());
}
}
}
class
SendThread
extends
Thread {
public
void
run() {
while
(Enable==
true
) {
try
{
Log.i(
"dsem_log"
,
"버퍼라이터 정의"
);
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(socket.getInputStream(),
"MS949"
));
Log.i(
"dsem_log"
,
"리드라인 시작"
);
msg =
new
String(br.readLine());
Log.i(
"dsem_log"
,
"리드라인 끝, 읽어온 버퍼:"
+ msg);
}
catch
(Exception ex) {
Log.i(
"dsem_log"
,
"리드라인 오류 또는 타임아웃"
);
connect();
Log.i(
"dsem_log"
,
"소켓 재생성 완료"
);
}
}
}
}
class
RequestThread
extends
Thread {
public
void
run() {
while
(Enable==
true
) {
try
{
Thread.sleep(
100
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
if
(msg !=
null
) {
Log.i(
"dsem_log"
,
"포스트 보냄"
);
handler.post(
new
TextRunnable(msg));
msg =
null
;
}
}
}
}
class
TextRunnable
implements
Runnable {
String mText;
public
TextRunnable(String text) {
mText = text;
}
public
void
run() {
Log.i(
"dsem_log"
,
"핸들러-텍스트 바꿈 :"
+ mText);
Log.i(
"dsem_log"
,
"현재 버퍼 :"
+ msg);
textView01.setText(mText);
}
}