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 |