뭐가 문제 인지 모르겠습니다...;;


그냥 String 전송은 잘되는데


사진을.. 이제 보내려고 하니깐... 잘못 되었나 봅니다. ㅠㅠ

아마... 데이터 스트림을 다루는데에.. 익숙치 않아서..


윈도


-java 기반의 서버 입니다.

package mytest;


import java.awt.AWTException;

import java.awt.Robot;

import java.awt.TextArea;

import java.awt.Toolkit;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.StringSelection;

import java.awt.event.KeyEvent;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class TCPServer implements Runnable {

public static final int ServerPort = 5557; // ex: 5555


public static String str = null;


@Override

public void run() {

// TODO Auto-generated method stub

try {


// 서버 열린 것을 출력..

// System.out.println("S: Connecting...");

WindServer.resultArea.append("S: Connecting...\n");


// 소켓 생성..

ServerSocket serverSocket = new ServerSocket(ServerPort);


while (true) {

Socket client = serverSocket.accept();

// System.out.println("S: Receiving...");

WindServer.resultArea.append("S: Receiving...\n");


try {

BufferedReader in = new BufferedReader(

new InputStreamReader(client.getInputStream(),

"euc-kr"));

str = in.readLine();


// 출력..콘솔*****************************************

WindServer.resultArea

.append("S: Received: '" + str + "'\n");

// ****************************************************


// ppt 동작***********************************

if (str.length() > 4) {

if (str.substring(0, 4).equals("pbtn"))

PptFunc(str);

else

keyFunc(str);

} else {

keyFunc(str);

}

// *******************************************


// 그러니깐.. pbtn_Cap 이 오면.. 저장된 사진 파일을 보내는 것입니다.

// *****************원래 단순하게 보내는 것*******

if (str.equals("pbtn_Cap")) {


PrintWriter out = new PrintWriter(

new BufferedWriter(new OutputStreamWriter(

client.getOutputStream())), true);


out.flush();

DataInputStream dis = new DataInputStream(

new FileInputStream(new File(

"c://cap/capture.jpg")));

DataOutputStream dos = new DataOutputStream(

client.getOutputStream());

byte[] buf = new byte[1024];

while (dis.read(buf) > 0) {

dos.write(buf);                                        // 이곳이 83번째 라인입니다.

dos.flush();

}

dos.close();

}


else {


PrintWriter out = new PrintWriter(

new BufferedWriter(new OutputStreamWriter(

client.getOutputStream())), true);

out.println("Server Received " + str);

}

// 파일 전송..//


WindServer.resultArea.append("Server Received " + str

+ "\n");

} catch (Exception e) {

// System.out.println("S: Error");

WindServer.resultArea.append("S: Error" + "\n");

e.printStackTrace();

} finally {

client.close();

// System.out.println("S: Done.");

WindServer.resultArea.append("S: Done." + "\n");

}

}

} catch (Exception e) {

// System.out.println("S: Error");

WindServer.resultArea.append("S: Error- after Socket" + "\n");

e.printStackTrace();

}

}



여기 까지가 일단 서버 이고..


android ....... 뭐... 어떻게 말하면 클라이언트지만.. 사진은 받는 서버입니다.

package Navi.edu;


import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.Socket;

import android.util.Log;


public class socketfunc {

public static String msg = null; // 메시지

public static String ip = null; // 주소


// 생길때 마다 TCP소켓 쓸꺼 하나 만든거지...

public static void TCPset(String msgstr) {

TCPclient tp = new TCPclient(msgstr);

tp.run();

}


public static class TCPclient implements Runnable {


private static final int serverPort = 5557; // 포트넘버

private String return_msg; // 반환 메시지


public TCPclient(String msgstr) {

msg = msgstr;

}


public void run() {

// TODO Auto-generated method stub

try {

InetAddress serverAddr = InetAddress.getByName(ip);


Log.d("TCP", "C; ing.");


// 소켓 이상하게 만들지 말라고 만든거..

System.setProperty("java.net.preferIPv6Addresses", "false");


Socket socket = new Socket(serverAddr, serverPort);


try {

Log.d("TCP", "C: ing2 '" + msg + "'");

PrintWriter out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(socket.getOutputStream(),

"euc-kr")), true);


out.println(msg);


Log.d("TCP", "C: Sent.");

Log.d("TCP", "C: Done.");

// -----------------------------------------------------------------


// 여기서는 사실.. 반환 메시지를 써야 되는데.. ㅠㅠ 그것도 해결을 못해서..

// 일단은.. 서버로 부터 오는 메시지를 받아버리는 걸로 했습니다.

// -----------------------------------------------------------------

// 받는 것 자체를 화면으로 받아 버릴까?;;; 이것만 해결되면 거의 완성인데...

BufferedReader in = new BufferedReader(

new InputStreamReader(socket.getInputStream()));

return_msg = in.readLine();


File f = new File("/mnt/sdcard/now.jpg");


FileOutputStream output = new FileOutputStream(f);

byte[] buf = new byte[1024];

while (socket.getInputStream().read(buf) > 0) {

output.write(buf);

output.flush();

}

// in.close();

// output.close();


Log.d("TCP", "C: Server send to me this message -->"

+ return_msg);

} catch (Exception e) {

Log.e("TCP", "C: Error1", e);

} finally {

socket.close();

}

} catch (Exception e) {

Log.e("TCP", "C: Error2", e);

}

}


}

}




에러 메시지 입니다..



java.net.SocketException: Connection reset by peer: socket write error

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(Unknown Source)

at java.net.SocketOutputStream.write(Unknown Source)

at java.io.DataOutputStream.write(Unknown Source)

at java.io.FilterOutputStream.write(Unknown Source)

at mytest.TCPServer.run(TCPServer.java:83)

at java.lang.Thread.run(Unknown Source)

java.net.SocketException: Connection reset by peer: socket write error

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(Unknown Source)

at java.net.SocketOutputStream.write(Unknown Source)

at java.io.DataOutputStream.write(Unknown Source)

at java.io.FilterOutputStream.write(Unknown Source)

at mytest.TCPServer.run(TCPServer.java:83)

at java.lang.Thread.run(Unknown Source)



아마.. ..ㅠㅠ. 일단.. 이거라도 해결해 주실 용자분? ㅠㅠ


사실.. 저곳에서도.. 나눠야 됩니다.


무조건 파일스트림 받아서.. 사진으로 만드는 것 보다는..


어떤 조건부로.. 파일을 저장하고.. 아니면 기본적으로 string이 반환되게.. 해야 합니다. .ㅠㅠ