[ASP.NET] 클라이언트가 멀티파트 보내고 서버가 받기

 

 

 

 

 

 

참고 : http://www.scripter.co.kr/entry/c-MultipartUpload

클라이언트 :

string url = "http://someServerApp.aspx"; FileStream fs = File.Open(@"d:\a.jpg", FileMode.Open, FileAccess.Read); byte[] data = new byte[fs.Length]; fs.Read(data, 0, data.Length); fs.Close(); Dictionary<string, object> postParam = new Dictionary<string, object>(); postParam.Add("1stParam", "1stValue"); postParam.Add("2ndParam", "2ndValue"); postParam.Add("file", new MultiPartUpload.FileParameter(data , "abc.jpg" , "image/jpeg")); HttpWebResponse webResponse = MultiPartUpload.MultipartFormDataPost(url, "", postParam); StreamReader reader = new StreamReader(webResponse.GetResponseStream()); TraceBox.trace(reader.ReadToEnd()); webResponse.Close();

;

 

 

 

서버 :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using System.IO;
namespace SimpleRequest
{
    public partial class test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            print("post count : " + this.Request.Form.Count + Environment.NewLine);
            foreach (string str in Request.Form)
            {
                print("name : " + str + "     value : " + Request.Form[str]);
            }

            print("FileCount : " + Request.Files.Count);
            if (Request.Files.Count == 0)
                return;

            HttpPostedFile file = Request.Files[0];
            print("-- fileName : " + file.FileName);
            print("-- fileSize : " + file.InputStream.Length);
        }

        private void print(object str)
        {
            Response.Write(str.ToString() + Environment.NewLine);
        }
    }
}
;

 

Request.Files 에서 파일 스트림을 포함한 정보를 얻을수 있다.

Yamecoder 야매코더_
C# 2012.05.05 23:27

[c# TCP socket] Clinet가 죽은것을 알아채기


<TCP 서버 에서 TCP클라이언트를 이용하는 상황에서..>

TcpClient 클래스 속성중 Connected  라는 속성이 있다. 말그대로 클라이언트가 살았는지 죽었는지

판단하는 속성인데 서버에서 잘 작동하지 않는다. ( 나만 잘 모르는 것일수도 있다.)

그리고 통상적으로 while 루프 안에 스트림을 읽어 오는 코드를 작성한다음

클라이언트 프로그램이 종료 되는경우를 TcpClient 클래스 속성중 Connected  를 이용하면

무한 루프에 빠진다.

해결책은 클라이언트로 오는 바이트 수가 "0" 인것을 확인하여 처리를 해주면 된다.



             while(true)
            {
                /***중요***/
                reciveByte = new byte[1024];
            
                data = reader.ReadLine();
                if(data == null)
                {
                    Invoke(mrg , "클라이언트가 죽었습니다");
                    AceptClient();
                    break;
                }
                
                
                /*** 중요 ***/
                else if(stream.Read(reciveByte , 0 , reciveByte.Length) == 0)
                {
                    Trace.WriteLine("EXIT");
                    AceptClient();
                    break;
                }
            }
/*** 중요 ***/ 라고 되어 있는 부분을 보면 된다.

byte[] 를 하나 만들어  Stream 의 Read 속성을 적용 시켜 주면 된다.

만약 공백이라면 "1" 바이트 를, 값이 날라오지 않는 경우라면 "0"  을 반환 함으로 Client가 죽었는것을 알수 있다.

추가로 첫번째 예외처리는 서버app 를 종료할때 생기는 에러를 대처하기 위함이다.

순간적으로 data 가 Null 값이 됨으로 while 를 탈출하게 해논것이다.
 
 
 
파일 전송중 클라이언트 사망을 눈치 채기 (2012,02,12)
http://scripter.co.kr/203

Yamecoder 야매코더_
C# 2010.12.04 03:51

[Simple Text Writer V0.1] 간편한 파일 쓰기 어플


간편한 파일 쓰기 어플



client code (AS3)

flush 규칙!


         파일경로(filePath):::내용(content) + "\n"

(':::' 요걸로 파일경로와 내용을 구분합니다.)


ex >> "c:\\sampleFolder\\childFolder\\content.xml"
         +":::
         +xml.toString()
         +"\n";


그냥 자기 컴퓨터에서 돌아가는 로컬용 입니다.(웹은 당연 안돌아가겠죠)
대용량은 테스트 안해봤습니다.
하루 종일 돌려보진 않았습니다.
피드백은 덧글로..
버전업은 할수 있을지. ,, 과연 = =;
옵션도 넣고 하려 했지만.. 일을 줄이기 위해 만드는건데, 이게 더 일이 될것 같아서 딱 필요한것만 구현했습니다.
Yamecoder 야매코더_
C# 2010.12.04 02:35
Powerd by Tistory, designed by criuce
rss