728x90
반응형
SMALL
 
============================== c# server ==============================
 
서버소켓을 생성하고 안드로이드 에뮬레이터에서 보내오는 스트림 데이터를 설정된 경로에 FileStream클래스를 이용하여 저장한다. 전송이 완료되면 파일 스트림을 닫는다.  
SpiltFileNameBuf는 파일 명을 필터링 하는 함수이다.
 
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; 
        } 
    } 
}
 
============================== Android ==============================
TCPClient.java 
 
소켓을 생성하고 안드로이드 에뮬레이터의 sdcard에 있는 사진 파일을 검색해서 DataOutputStream 클래스로 패킷화 하여 소켓으로 전송한다.
 
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(); 
}
 
Sock.java 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
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.setOnClickListener(new OnClickListener(){ 
            @Override 
                       public void onClick(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(""); 
                } 
            } 
        }); 
    } 
}
728x90
반응형
LIST

'개발' 카테고리의 다른 글

[svn] Item is out of date  (1) 2024.11.06
[ios] uitextfield의 자동완성 기능 제거하기  (0) 2024.11.06
공인인증기관 CRL DP 주소  (0) 2024.11.04
VMware Workstation unrecoverable error:(vmui)  (0) 2024.11.03
ora-01261 and ora-01262  (0) 2024.11.02

+ Recent posts