일단 안드로이드 폰을 클라이언트로 잡고 자바를 서버로 잡았습니다.

이때 안드로이드폰에서 자바쪽으로접속까진 구현했는데

이제 서버에서 안드로이드폰으로 그림파일을 전송해주는 소스를 짯는데 계속 막혀서 .. 질문드립니다.

일단  소스는 총 3가지입니다.

<SERVER>

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

 

public class ServerDB implements Runnable {
 
 final int serverport = 11269;
 private FileInputStream fis=null;
 private OutputStream os=null;
 private byte[] buffer = new byte[1024];
 private File file = new File("ju.png");
 
 private ServerSocket ss = null;
 private Socket soc = null;
 

    String client_sp = "/w";
 
 public static void main(String[] args) {
  
  Thread ServerTh = new Thread(new ServerDB());
  ServerTh.start();
 }
 
 @Override
 public void run() {
  // TODO Auto-generated method stub
  System.out.println("Server Ready....");
  
  BufferedReader br;
  PrintWriter pw; 
  
  
  try {
   
   ss = new ServerSocket(serverport);
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  try{
   soc = ss.accept();
  
   while(true){
    try{
     // 클라이언트 접속 대기
       
     
     System.out.println("접속자 = "+soc.toString());
     
     String client_m;
     String send_m;
     
     br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
     pw = new PrintWriter(soc.getOutputStream());
     client_m = br.readLine();
     
     String flen = String.valueOf(file.length());//파일의 크기를 받아온다
     String header = "0000000000".substring(0, 10-flen.length()) + flen;
     
     fis = new FileInputStream(file);
     os = soc.getOutputStream();
           System.out.println(file.getName()+" : "+fis.toString()+" : "+header);
     os.write(header.getBytes()); // 파일들을 구분할 데이터를 먼저 전송한다.
     os.flush();
     
     while(fis.available() > 0){
      int readSize = fis.read(buffer);
      os.write(buffer, 0, readSize);
      os.flush();
     }
     fis.close();
 //    os.close();
     
     if(client_m.equals(client_sp)){
      // 접속 요청을 하는 것이므로 DB값 보내주면 됨
      send_m = DBInit();
      pw.print(send_m);
      pw.close();
     }
     
    } catch(IOException e){
     e.printStackTrace();
    }
    MatrixTime(1000);
   }
  }catch(Exception e){
   
  }
  
 }
 
 public static void MatrixTime(int delayTime){ // While문에 딜레이를 주기위한 함수
   
        long saveTime = System.currentTimeMillis();

        long currTime = 0;

        while( currTime - saveTime < delayTime){

            currTime = System.currentTimeMillis();

        }

    }
 
 public String DBInit(){
  Connection conn;
  Statement stmt;
  ResultSet rs = null;
  String message = null;
  
  String jdbcURL = "jdbc:mysql://localhost:3306/juchajang";
  String userID = "root";
  String userPass = "pc516";
  
  try{
   conn = DriverManager.getConnection(jdbcURL, userID, userPass);
   try{
    Class.forName("com.mysql.jdbc.Driver");
   } catch(ClassNotFoundException e){
    e.printStackTrace();
    System.err.println("erro1");
   }
   
   stmt = conn.createStatement();
   System.out.println("Connection Success!");
   
   stmt.execute("use juchajang");
   rs = stmt.executeQuery("Select * from jucha;");
   
   
   
   while(rs.next()){
   System.out.print(rs.getString(1)+"\t");
   System.out.print(rs.getString(2)+"\t");
   System.out.print(rs.getString(3)+"\t");
   System.out.print(rs.getString(4)+"\t"+"\n");
    
    message = rs.getString(1) + "/" +
      rs.getString(2) + "/" + rs.getString(3)+ "/" + rs.getString(4);     
   }  
   
   rs.close();
   stmt.close();
   conn.close();
   
  } catch (SQLException e){
   e.printStackTrace();
  }
  return message;
 }

 
}

 

<Client> 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
 
 OpenDBHeloper oHelper;
 EditText et1;
 EditText et2;
 EditText et3;
 Button bt1;
 Button bt2;
 Button bt_server;
 private TextView tv1;
 private Socket clientSocket;
 
 SQLiteDatabase db;
 ContentValues row;
 Cursor cursor;
 
 ClientSocket clientsoc;
 
 private final String serverip = "220.69.24.102";
 private final int serverport = 11269;
 
 
 private Handler mHandler = new Handler(); // Background 작업과 작업의 효율성을 위한 핸들러 생성
    private Runnable r = new Runnable() {
  
  public void run() {
//   getFile();
//       screenPlayer();
   //Log.w("TEST", "TEST");
//       imView.setImageBitmap(BitmapFactory.decodeFile(filename));
   mHandler.postDelayed(r, 1000);
  }
    };
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        oHelper = new OpenDBHeloper(this);
       
        et1 = (EditText)findViewById(R.id.gps_name);
        et2 = (EditText)findViewById(R.id.gps_x);
        et3 = (EditText)findViewById(R.id.gps_y);
        bt1 = (Button)findViewById(R.id.bt1);
        bt2 = (Button)findViewById(R.id.bt2);
        bt_server = (Button)findViewById(R.id.bt_server);
        tv1 = (TextView)findViewById(R.id.tv_result);    
       
        // 저장하고 싶으면 주석처리 하고
        data_init();
       
        bt1.setOnClickListener(new OnClickListener() {   
   public void onClick(View v) {
    // TODO Auto-generated method stub
    db = oHelper.getWritableDatabase();
    /*// insert 메서드로 삽입
    row = new ContentValues();
    row.put("gpsname", "namgu 1th store");
    row.put("gpsx", "35112326");
    row.put("gpsy", "126894836");
    db.insert("gps1", null, row);*/
    
    String gps_name = et1.getText().toString();
    String gps_x = et2.getText().toString();
    String gps_y = et3.getText().toString();
        
    // sql 쿼리로 삽입
    db.execSQL("insert into gps1 values ('"+ gps_name
      +"', '"+ gps_x +"', '"+ gps_y +"') ");
    oHelper.close();
    
    display_read();
    
    et1.setText("");
    et2.setText("");
    et3.setText("");
   }
  });
       
        bt2.setOnClickListener(new OnClickListener() {   
   public void onClick(View v) {
    // TODO Auto-generated method stub
    display_read();
   }
  });
       
        bt_server.setOnClickListener(new OnClickListener() {
   
   public void onClick(View v) {
    // TODO Auto-generated method stub
    // Server 접속 처리
    clientsoc = new ClientSocket(serverip, serverport);  
    clientSocket = clientsoc.getSocket();
    mHandler.post(r);
   }
  });
       
        //
       
    }
      public void data_init() {
  // TODO Auto-generated method stub
     db = oHelper.getWritableDatabase();
     db.execSQL("DELETE FROM gps1;");
     oHelper.close();
     db.close();
 }
 public void display_read(){     
  tv1.setText("Result =" + "\n");
     db = oHelper.getReadableDatabase();
     cursor = db.rawQuery("SELECT gpsname, gpsx, gpsy FROM gps1", null);
     String result = " ";
     
     while(cursor.moveToNext()){
      String gpsname = cursor.getString(0);
      String gpsx = cursor.getString(1);
      String gpsy = cursor.getString(2);
      result += (gpsname + " | " + gpsx + " | " + gpsy + " | \n");
      tv1.append(result);
     }
     cursor.close();
     db.close();
    }
}

<Socket Client>

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientSocket {
 private Socket soc = null; // 소켓 객체 생성
// private InputStream is = null;
 private FileOutputStream fos;
 private InputStream is;
 private String fileName = "getting.png";
 private File file;
 
 
 public ClientSocket(String ip, int port){
  try {
   soc = new Socket(ip, port);
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
  
  PrintWriter pw = null;
  BufferedReader br = null;
  try {
   // 소켓에 out으로 출력
   pw = new PrintWriter(soc.getOutputStream());
   // 구분자로 /w
   String outmessage = "/wHello";
   pw.print(outmessage);
   pw.close();
   is = soc.getInputStream();
   br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
   String message;
   while(true){
    message = br.readLine();
    System.out.println(message);
   }  
   
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
 }
 
 public void getFile(){
     String filePath = android.os.Environment.getExternalStorageDirectory()+"/"+fileName;
     file = new File(filePath);
     if(!file.exists()){
      try{
       file.createNewFile();
      }catch(IOException e){
       
      }
     }
     try{
      fos = new FileOutputStream(file);
      is = soc.getInputStream();
      System.out.println(is.toString()+" : "+is.available());
     }catch(IOException e){
      
     }
     
     byte[] buffer = new byte[4096];
     try{
      is.read(buffer, 0, 10);
      String header = new String(buffer, 0, 10);
      
      int bodySize = Integer.valueOf(header);
      int readSize = 0;
      
      while(readSize>bodySize){
       int rSize = is.read(buffer);
       
       fos.write(buffer, 0, rSize);
       
       readSize = readSize+rSize;
       fos.flush();
      }
     }catch(IOException e){
      
     }finally{
      try{
       fos.close();
//       is.close();
      }catch(IOException e){
       
      }
     }
     
     
    }
  public Socket getSocket(){
  return soc;
 }
 
 public InputStream getInputStream(){
  return is;
 }
}

 

 

이세가지입니다. 그런데 오류결과를 뒤져보니   os.write(header.getBytes()); 이쪽에서 오류가나는데요;; 무엇이 문제인질모르겠습니다 소스코드상에서 오류는없는데..  왜이러는지 모르겠습니다 ㅜ 첨부파일