본문 바로가기

C#

[Tcp] 연속적인 정보를 송출시 유의점 상황 : 키넥트 센서에서 검출된 x , y, z 좌표를 int 형(4byte) 로 클라이언트에게 송출한다. 기존코드 : public void sendByte(Socket client, byte[] data) { if (client.IsBound == false) return; try { NetworkStream ns = new NetworkStream(client); ns.Write(data, 0, data.Length); ns.Flush(); ns.Close(); ns.Dispose(); ns = null; } catch (IOException) { } catch (SocketException) { } } data 에 보낼 정수들을 모아 보낸다. 예) int[]{123,424,312} ->( BitCo.. 더보기
[MEMO] AS3 와 통신간에는 Endian 을 변경해주어야 한다. AS3 => some(data : ByteArray):void { data.endian = Endian.LITTLE_ENDIAN; //read .. something } 더보기
[WCF] 간단한 채팅 샘플 ㅁㅁㅁ using System.ServiceModel; namespace TESTWCF_2_Server { //콜백할 인터페이스 이다. 곧 Client 가 된다.. [ServiceContract] public interface ISomeCallback { [OperationContract] void SendMessageToClient(string someStr); } //WCF host에서 구현할 인터페이스 이다. //ServiceContract 에 콜백 인터페이스를 등록 하였다. [ServiceContract(CallbackContract = typeof(ISomeCallback))] public interface ISome { [OperationContract] void StartService(); .. 더보기
[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 postParam = new Dictionary(); postParam.Add("1stParam", "1stValue"); postParam.Add("2ndParam", "2ndValue"); postParam.Add("file", ne.. 더보기
[lamda] 메서드 안에 이벤트 핸들러 선언하기 , 삭제가능 (내장 Delegate) http://stackoverflow.com/questions/4303922/removing-anonymous-event-handler 더보기
EnCrypto / DeCrypto ////read orignal text TextReader tr = new StreamReader(File.OpenRead("TextFile1.txt")); string result = tr.ReadToEnd(); tr.Close(); byte[] orignalTextByte = Encoding.Default.GetBytes(result); //crypto alogrithm SymmetricAlgorithm sa = DES.Create(); //encrypto MemoryStream encryptoMs = new MemoryStream(); CryptoStream encryptoStream = new CryptoStream(encryptoMs, sa.CreateEncryptor(), CryptoStrea.. 더보기
[socket] header 정보의 byte length를 미리 알아보자 기존에는 header 정보를 보낼때 1024 , 2048 , 등등의 header byte를 서버와 클라이언트가 약속하여 보냈다. 따라서 클라이언트가 보내려는 바이트가 1개 이든 100개 이든 무조건 1024 개를 억지로 맞추어 보냈다. 불필요 했다. 한가지 과정만 서버에 보태어 진다면.. 클라이언트 접속 ↓ RowBuffer 바이트배열에 클라이언트로 부터 받은 모든 바이트를 넣는다(client.Receive(Rowbuffer)) ↓ RowBuffer 에 유요한 바이트가 몇개인지 체크한다. (바이트가 "0" 이상 일때) ↓ 체크된 수 만큼 실제 headerBuffer 바이트배열을 생성한다 ↓ headerBuffer 에 RowBuffer 를 1:1 삽입한다. ※ 그냥 RowBuffer를 인코딩하여 읽었다가는.. 더보기
[C# Socket ] 파일전송중 Client 가 죽은것 알아채기 2 파일 전송중에 클라이언트가 죽은것을 알아채는 방법 타이머를 이용하여 받은 지금까지 받은 바이트 길이의 변화량이 일정시간 동안 변경이 없을때, 종료하면 된다. int contentByteLength = 0; int totalbytelength; bool exitCheck = false; int checkIntValue = 0; checkTimer = new Timer(1000); checkTimer.Elapsed += delegate { if (checkIntValue == contentByteLength) { Console.WriteLine("check!"); exitCheck = true; checkTimer.Dispose(); checkTimer.Close(); checkTimer = null; } .. 더보기
[TCP 파일전송] [서버의 접속클라이언트 스레드풀] server 코드 //inThread public void startServer() { server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverIp = JSmsService.util.NetUtil.GetIP4(); server.Bind(new IPEndPoint(serverIp, serverPort)); server.Listen(1); Console.WriteLine("serverStart " + serverIp + " " + serverPort); while (true) { Console.WriteLine("wait"); IAsyncResult ar = server.BeginAccept(new .. 더보기
[WebForm] 필요한것 간단 정리 보호되어 있는 글입니다. 더보기
[LINQ to SQL] 먼저 사용할 데이터 베이스를 만들거나 연결한다. 위의 두가지 방법으로 만들거나 연결할수 있다. MSSQL 사용시 정상적으로 설치되고 테이블이 존재 한다면 자동으로 뜬다. 혹은 서버네임을 입력해야 하는 경우도 있다. 그리고 LINQ to SQL 클래스를 만들자. 만들고 만들어진 dbml 을 클릭하고 ... 서버탐색기를 열자 연결이 되었다면 아래와 같이 테이블이 보일것이다. 그것을 오른쪽으로 드래그 하자. 대략 코드는 아래와 같다. 편하게도 Table 들이 자동완성이 된다. 그리고 쉽게 리스트를 얻을수 있다. 테이블의 "InsertOnSubmit" 메서드를 아래와 같이 이용하여 쉽게 값을 넣을수도 있다. DataClasses1DataContext db = new DataClasses1DataContext().. 더보기
[IPv4] IPv4 주소 쉽게 알아내기 IPAddress[] localIPS = Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in localIPS) { if (ip.AddressFamily == AddressFamily.InterNetwork) { Console.WriteLine(ip + " " + ip.AddressFamily); } } 더보기
[c# MultipartUpload] http://www.briangrinstead.com/blog/multipart-form-post-in-c 굳. FormUpload 클래스 public static class FormUpload { private static readonly Encoding encoding = Encoding.UTF8; public static HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, Dictionary postParameters) { string formDataBoundary = "-----------------------------28947758029299"; string contentType = "multipart/form-dat.. 더보기
[CustomEvent] 간단한 이벤트 클래스 작성 EventArgs 를 상속받는 클래스 안에다가 이벤트에 필요한 "event" 와 delegate 를 함께 작성 함으로서 구현 코드의 코드량을 줄였다. 이벤트 클래스 작성 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StikusFrameAuth.events { public class SFATraceEvent : EventArgs { //event public delegate void SFATraceEventDele(object sender, SFATraceEvent e); public static event SFATraceEventDele TraceEvent; //arg publi.. 더보기
[WCF] WCF의 기초 통신 기본적인 통신으로서 Http 를 이용하겠다. 서버측 인터페이스 (DLL 으로 뽑을것) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace StikusFrameServiceInterFace { [ServiceContract] public interface ISFServerProtocol { [OperationContract] string StikusFrameAuth(string AuthXmlDataString); [OperationContract] string StikusFrameClose(string AuthXmlDataString); }.. 더보기
[ASP.NET] ASP.NET - IIS 셋팅하면서 부닥치는 에러와 해결방법 추가내용 2015 03-19 *확실한 iis 설정 방법 : http://asalgom.tistory.com/1*iis 설정하고 공유기 포트포워드 한다음 다른 컴퓨터에서 접속할 경우 방화벽의 인바운드 규칙을 새로 작성한다. [프로토콜 및 포트]에서 포트를 공유기에서 설정한 값과 동일한 값을 입력한다. IIS 를 깔고 새로 만든 ASP.NET이 제대로 작동하는지 까지만 알아보도록 한다. 물론 , 닷넷4.0 과 기본적으로 ASP.net을 개발할수 있는 환경이 갖추어 져야 한다. 그냥 복잡하면 비주얼스튜디오2010 익스프레스 버전이라도 깔자. 먼저 제어판-프로그램 및 기능-Windows 기능 사용/사용 안함 에서 아래 항목을 체크해 준다. 걍.. 다 체크 하는것이 속편하다. 하지만 선별적으로 해야 한다면 "보안.. 더보기
[C# , AS3 , ETC] 한글 유니 코딩 조합 원리 //참고 원문 : http://uuzazuk9.egloos.com/906488 한글 조합 공식 : [{(초성)×588}+{(중성)×28}+(종성)]+44032 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Window.. 더보기
[C# 서버에서 AS3 클라이언트 비정상 종료 체크하기] TcpServer 에서 얻어온 client = server.AcceptTcpClient(); 그리고 client.Client.Connected 라는 속성이 있는데 , 이것은 swf 가 종료 되었을때 체크가 불가능 하다. 그래서 예전에는 [한번 연결 , 한번 송수신 , 바로 종료] 의 매커니즘으로 안전적인 연결을 보장했다. 참고 (http://www.scripter.co.kr/entry/TCPSocket-안전한-Socket-연결과-버퍼데이터를-설정한-데이터전송-C-As3) 하지만 계속 연결을 보장해야 하는경우도 있지 않을까... 역시나 문제는 연결이 지속가능한지를 체크하여 소켓 루프를 사용가능한 상태로 만들어야 하는데 방법이 마땅치 않았다. 구지 방법을 찾자면 서로가 지속적으로 소켓을 통해 [서버 : 잘있.. 더보기
[C# , SMTP]구글 SMTP 로 메일 보내기 Gmail 계정을 이용해 별도의 메일 서버 없이 E 메일을 발송할수가 있다. 아래는 이해를 돕기위해 변수 , 메서드를 나열하였다.(실 개발에서는 좀더 세련된 코드로...) Created with colorer-take5 library. Type 'csharp' private void SendMail() { // //필요한 정보 , id , pw 는 Gmail 계정을 입력한다. // String id = "****@gmail.com"; String pw = "****"; String from = "****@gmail.com"; String mailto = "totototo@nate.com"; String title = "TITLE2"; String htmlStr = "My First HeadingMy fi.. 더보기
[TwitPic 모듈] 트윗픽을 손쉽게 활용하자 사용법 소켓 IP : 로컬 (127.0.0.1) 소켓 포트 : 55667 명령전송 (헤더) : 256 바이트 헤더에 "$ID:"+$id+"$PW:"+$pw+"$USERID:"+$userId+"$TEXT:"+$text; 나머지 남는 바이트는 공백 " " 처리 를 하여 256 바이트를 채운후 256바이트 이후 JPG , PNG 포멧을 싣어 보낸다 제약사항 : 이미지파일이 4MB를 넘지 않을것, 같은 아이피로 시간당 500번 이상 포스팅 금지 * TEST Flash App 버튼 클릭시 테스트용 플래시 어플이 실행됨 Flash AS3 용 라이브러리 활용법 var target : FileReference = event.currentTarget as FileReference; var send : simple_twi.. 더보기
[WPF] WebBrowser 에서 Documents 보기 (html) 참조 추가 -> (.NET) -> Microsoft.mshtml 을 추가한다. 다음 웹브라우져 개체의 로드컴플릿 이벤트 호출후 mshtml.HTMLDocumentClass doc = webBrowser1.Document as mshtml.HTMLDocumentClass; Console.WriteLine(doc.body.innerText); 식으로 body 안에서 필요한 메소드를 찾아 사용한다. 더보기
[Directory Copy] 디렉토리 통채로 카피하기 원문 : http://www.codeproject.com/KB/files/copydirectoriesrecursive.aspx using System.IO; namespace StikusInstallWareV1 { public class UTIL { /** * 디렉토리의 유효성을 검사한후 * 내부의 파일이 디렉토리이면 , 반복처리를 (recursion), * 내부의 파일이 진짜 파일이면 같은 위치에 복사를 한다 * **/ public static void CopyDir(string src, string dst) { string[] files; if (dst[dst.Length - 1] != Path.DirectorySeparatorChar) dst += Path.DirectorySeparatorChar;.. 더보기
[IWshRuntimeLibrary] ShotCut,단축아이콘 만들기 "프로젝트 - 참조 - 서비스참조 추가" 에서 Window Script Host Object Model 를 추가 한다. Created with colorer-take5 library. Type 'csharp' using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media... 더보기
[MouseKeyboardLibrary] 상당히 편리한 마우스키보드 후킹 라이브러리 원문 : http://www.codeproject.com/KB/system/globalmousekeyboardlib.aspx 물론 그냥 쌩으로 만들어 써도 되지만 , 이렇게 잘 정리되고 간단한 라이브러리를 쓰는것도 참 괜찮은 방법. 예제는 프로젝트를 열어보면 있다. 간단한 키보드 후킹 사용법 : KeyboardSimulator.KeyDown(System.Windows.Forms.Keys.A); KeyboardSimulator.KeyUp(System.Windows.Forms.Keys.A); 유의점이라면 매개변수 'Keys' 는 윈폼의 것이다. 따라서 참조에 윈폼을 추가해야 한다. 그냥 WPF 로 바꿔도 무방하다만, WPF 만 할것도 아니고 XNA 도 있고 여러가지 상황을 생각한다면 걍.. 이대로 쓰는것도 .. 더보기
[MultipartURLLoader] [서버에 파일 올리기] 간단 사용법 출처 : http://blog.inspirit.ru/ 파일레퍼런스로 파일을 불러오고 서버에 올리는 간단한 코드를 보겠다. package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.FileReference; import multiPartURLLoader.MultipartURLLoader; public class MultiPartTest extends Sprite { private var ml : MultipartURLLoader; public function MultiPartTest() { ml = new MultipartURLLoader; ml.addEven.. 더보기
[SimpleFileWriter V2] 디렉토리 생성 , 파일 삭제기능을 추가! 다운로드> 헤더 프로토콜 : $$ ex> 1) 쓰기 WRI$$c:/a.txt 2) 지우기 DEL$$c:/a.txt 3) 바이트 덧붙이기 APD$$c:/a.txt 4) 디렉토리 생성 CREAT_DIR$$c:/TEST 5) 파일 쓰기에 디렉토리를 붙이면 자동으로 생성 된다. WRI$$c:/TEST/a.txt // TEST라는 폴더를 생성하고 a.txt 를 만든다. 6) 디렉토리 삭제를 하면 하위 파일 모두 삭제 된다. DEL$$c:/TEST // TEST안의 모든 파일과 디렉토리가 지워 진다. As3 클래스 파일> 사용법 var data : BitmapData = new BitmapData(100,100,false, 0xcc); var bitmapFile : simple_file_writer2 = new .. 더보기
[SimpleFileWriter] AS3 에서 파일을 저장하자 기존 의 http://www.scripter.co.kr/entry/Simple-Text-Writer-V01-간편한-파일-쓰기-어플 를 업그래이드 해봤다. 예전에는 Text 만 되는 반면 이번꺼는 모든 As3 의 ByteArray를 죄다 기록할수 있다. 사용법 as3 package { import flash.display.BitmapData; import flash.utils.ByteArray; import jjongun.server.file_Socket_Server; import flash.display.Sprite; public class Main extends Sprite { public function Main() { var sp : Sprite = new Sprite(); sp.graphics.b.. 더보기
[FFMPEG] 영상을 변환 하자 WPF 로 어느 플랫폼의 컨텐츠 생성기를 만들고 있다. 취지는 누구나 빠르게 컨텐츠를 배출할수 있어야 한다. 기존의 방식은 복잡한 xml 에 값을 하나하나 대입을 하고 하는 정신노동을 요구했지만, 제작한 컨텐츠 생성기로 자동화, 간략화 할수 있었다. 그러던 와중 딲! 막힌것이 영상 이다. 컨텐츠 세트중 영상이 h264 로 뽑아야 하는데 기존의 방법대로라면 영상변환툴을 열어서 무압축으로 된 mov들을 임포트하여 수동조작으로 변환하여야 했다. 컨텐츠 생성기의 컨셉에 안맞는 방법이다. 영상 변환 마져 한방에 되어야 했다. 그래야 완벽하다. 물론 변환하는 프로그램이야 널렸지만 그것을 제어할수 있냐 / 없냐가 중요했다. 그러던 와중 2가지 방법을 찾을수 있었다. * MS Expression Encoder 장) 안.. 더보기
Socket 에 Header 정보와 같이 묶어 보내기 정보를 보낼때 헤더는 참 유용하고 필수적이다. 편지를 쓴다고 생각하자면, 받는사람 , 주소 , 우편번호 등등이 헤더에 해당할것이고 , 동내 구멍가게에서 라면을 사더라도 , 이라면이 무슨라면인지 , 매운맛인지 순한맛인지 ,조리법은 어떻 게 되는지 등등이 해더에 해당하는 정보라고 생각한다. 이처럼 무언가를 보낼때 이것이 어떠한 것이다 라는것을 표현할때는 조금은 바이트 배열을 이해할 필요가 있다. as3 에서는 ByteArray에 해당할것이고 , c# 에서는 Stream 등에 해당할것이다. 그리고 해더는 Text로 읽을수 있는 정보일것이고, (물론 어느 오브젝트 바이트 배열로 하겠다면 구지 텍스트가 아니어도 된다. ) 컨텐츠 영역은 Text일수도 있고 바이너리 일수도 있다. 문제는 없다. 뭐 어찌되었든 바이트.. 더보기
[TCPSocket] 안전한 Socket 연결과 버퍼데이터를 설정한 데이터전송 (C# <-> As3) 소켓사용을 꺼려하는 이유중 하나는 연결의 지속성을 보장하기가 까다롭기 때문이다. 또한 그것을 서로 스로스 체킹 하는 코드를 작성하기가 번거럽기 때문이기도 하다. 하지만 생각을 바꾸어 왜? 소켓을 항상 연결시켜 놔야 할까? 물론 실시간 데이터전송 같은경우 , 즉 마우스 좌표에 따라 무었을 지속적으로 움직여야 한다거나 하는 실시간적인 반응이 필요한 경우로 생각할수 있겠다. 하지만 데이터의 전송, 어느 순간 상태의 알림 등등의 경우에는 연결을 지속적으로 유지해야 할 필요가 없다. 본 모델은 이미 SimpleTextWriter (http://www.scripter.co.kr/entry/Simple-Text-Writer-V01-%EA%B0%84%ED%8E%B8%ED%95%9C-%ED%8C%8C%EC%9D%BC-%.. 더보기