|
일일 결과물 |
조 : 1조 |
작성자 : 유진명 | |
작성일 : 2010. 11. 26 | |
제목 : Android 파일 전송하기 – C# |
1. C# Server
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO;
namespace SocketServer { class Program { static void Main(string[] args) { IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse("192.168.34.52"), 10200); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Bind(ipendpoint); sock.Listen(5); Console.WriteLine("서버 작동중!!"); while(true) { Socket Handler = sock.Accept(); MySocketDoit msdo = new MySocketDoit(Handler); } } }
class MySocketDoit { Socket dosock; byte[] bytes = new byte[1024]; public MySocketDoit(Socket sock) { dosock = sock; Thread th = new Thread(new ThreadStart(DoWork)); th.Start(); } public void DoWork() { int byteRcv = dosock.Receive(bytes); string recvbuf = Encoding.UTF8.GetString(bytes, 0, byteRcv);
string path = string.Format("C:\\down\\{0}", SpiltFileNameBuf(recvbuf)); FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); int RcvFile; while (true) { RcvFile = dosock.Receive(bytes); if (RcvFile > 0) { fs.Write(bytes, 0, RcvFile); } else { fs.Close(); Console.WriteLine("전송 완료!!"); break; } } dosock.Shutdown(SocketShutdown.Both); dosock.Close(); }
private string SpiltFileNameBuf(string recvbuf) { string fname = string.Empty; int cnt =0; while(recvbuf[cnt] != '\n') { fname += recvbuf[cnt]; cnt++; } return fname; } } } |
서버소켓을 생성하고 안드로이드 에뮬레이터에서 보내오는 스트림 데이터를 설정된 경로에 FileStream클래스를 이용하여 저장한다. 전송이 완료되면 파일 스트림을 닫는다. SpiltFileNameBuf는 파일 명을 필터링 하는 함수이다. |
2. Android Client
- TCPClient.java
package sm.bit.sock;
import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket;
public class TCPClient implements Runnable{ private static final String serverIP="192.168.34.52"; private static final int serverPort = 10200; private String msg; public TCPClient(String msg){ super(); this.msg = msg; } @Override public void run(){ try{ InetAddress serverAddr = InetAddress.getByName(serverIP); Socket sock = new Socket(serverAddr, serverPort); try{ PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())), true); out.println(msg); out.flush();
DataInputStream dis = new DataInputStream(new FileInputStream(new File("/mnt/sdcard/"+msg+".jpg"))); DataOutputStream dos = new DataOutputStream(sock.getOutputStream()); byte[] buf = new byte[1024]; while(dis.read(buf)>0) { dos.write(buf); dos.flush(); } dos.close(); } catch(Exception e){ e.printStackTrace(); } finally { sock.close(); } } catch(Exception e){ e.printStackTrace(); } } } |
소켓을 생성하고 안드로이드 에뮬레이터의 sdcard에 있는 사진 파일을 검색해서 DataOutputStream 클래스로 패킷화 하여 소켓으로 전송한다. |
- Sock.java
package sm.bit.sock; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.[안내]태그제한으로등록되지않습니다-xxOnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;
public class Sock extends Activity { private EditText myet; private TextView mytv; private Button mybtn; public String remsg; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
myet = (EditText)findViewById(R.id.edit); mytv = (TextView)findViewById(R.id.text); mybtn = (Button)findViewById(R.id.sendbtn); mybtn.set[안내]태그제한으로등록되지않습니다-xxOnClickListener(new [안내]태그제한으로등록되지않습니다-xxOnClickListener(){ @Override public void [안내]태그제한으로등록되지않습니다-xxonClick(View v){ if((mybtn.getText().toString() != null)&& (!mybtn.getText().toString().equals(""))){ TCPClient tp = new TCPClient(myet.getText().toString()); tp.run();
mytv.setText(myet.getText().toString()); myet.setText(""); } } }); } } |
3. 실행 결과
- C#
|
|
- Android
|
[조별스터디 Android] 안드로이드 파일전송 - C#.doc