소켓사용을 꺼려하는 이유중 하나는 연결의 지속성을 보장하기가 까다롭기 때문이다. 또한 그것을 서로 스로스 체킹
하는 코드를 작성하기가 번거럽기 때문이기도 하다.
하지만 생각을 바꾸어 왜? 소켓을 항상 연결시켜 놔야 할까? 물론 실시간 데이터전송 같은경우 , 즉 마우스 좌표에 따라 무었을 지속적으로 움직여야 한다거나 하는 실시간적인 반응이 필요한 경우로 생각할수 있겠다.
하지만 데이터의 전송, 어느 순간 상태의 알림 등등의 경우에는 연결을 지속적으로 유지해야 할 필요가 없다.
본 모델은 이미
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-%EC%93%B0%EA%B8%B0-%EC%96%B4%ED%94%8C )
에서 사용하였고 지금까지 별 탈없이 사용한 모델을, UTF텍스트가 아닌 바이너리를 전송하는 경우로 생각하여 바꾸어 보았다.
목표는
1) 예전에 철없던 시절의 소켓서버 ( http://www.scripter.co.kr/entry/socket-c-server-as3-client )의 비효율성을 타파하여 좀더 세련된 방법으로 소켓을 구성하는 법.
2) "1)"의 연속적인 개념으로, 지속적인 연결이 아닌 한방에 한번씩 연결하여 전송하고 연결을 종료하는 방법.
3)큰 파일을 무리없이 전송하기 위해 버퍼를 설정하여 끊어 읽어 기록하는 방법
을 정리해보겠다.
우선 간단한 순서도를 보면 이러하다.
c# 서버
using System; using System.Windows; using System.Net.Sockets; using System.Threading.Tasks; using System.IO; namespace testEncoderRecieve { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainWindow_Loaded); } private Task ServerThread; private TcpListener server; void MainWindow_Loaded(object sender, RoutedEventArgs e) { ServerThread = new Task(startServerThreaed); server = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"),5555); //TcpListener를 생성하고, 서버 스레드가 시작되었다 ServerThread.Start(); } void startServerThreaed() { //서버를 시작시킨다. server.Start(); //버퍼를 설정한다. 우선64바이트 만큼만... Byte[] buffer = new Byte[64]; int testCount = 0; while (true) { //클라이언트를 대기한다. 클라이언트로 부터 접속신호가 있기 전까지 루프는 여기서 멈춤. TcpClient client = server.AcceptTcpClient(); //클라이언트가 접속하고 스트림을 가져 온다. NetworkStream netStream = client.GetStream(); //파일스트림을 생성하여 FileAccess.write로 한다. FileStream fs = new FileStream(@"d:\test" + testCount + ".png", FileMode.OpenOrCreate , FileAccess.Write); int i = 0; while ((i = netStream.Read(buffer, 0, buffer.Length)) > 0) { //여기서 정수i가 0보다 클때까지, 즉 끝까지 루프를 반복하며 정해진 버퍼만큼 기록한다. fs.Write(buffer, 0, i); }
|
as3 클라이언트
package { import flash.events.Event; import flash.net.Socket; import flash.utils.ByteArray; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.MouseEvent; import flash.media.Camera; import flash.media.Video; /** * @author superSc_PC */ [SWF(width = "1000")] public class Main extends Sprite { private var cam : Camera; private var vid : Video; private var captureBitmap : Bitmap; private var socket : Socket; public function Main() { //필요한것들을 생성하며 캡쳐환경을 만든다. cam = Camera.getCamera(); vid = new Video(); vid.attachCamera(cam); captureBitmap = new Bitmap(new BitmapData(vid.width, vid.height)); captureBitmap.x = vid.width; addChild(vid); addChild(captureBitmap);
|
아직까지는 as3 에서 버퍼단위로 전송하는 writeByte의 기능은 없는듯하다. 버퍼를 이용하기 위해선
인위적으로 해더 정보를 보내서 서버에서 끝어 읽기 하는 알고리즘이 필요하다
'C#' 카테고리의 다른 글
[FFMPEG] 영상을 변환 하자 (125) | 2011.03.05 |
---|---|
Socket 에 Header 정보와 같이 묶어 보내기 (49566) | 2011.03.04 |
[TCPSocket] 안전한 Socket 연결과 버퍼데이터를 설정한 데이터전송 (C# <-> As3) (148) | 2011.03.04 |
[WPF] WPF에서 Control 접근시 CrossThread 피하기 (103) | 2011.02.21 |
[C#] 현재 윈도우의 Top 핸들 얻기와 익스플로러로 타입캐스팅 하기 (81) | 2011.02.01 |
[C#] 활성윈도우 이름 과 핸들 알아내기 와 익스플로러 주소값 알아내기 (194) | 2011.01.31 |
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
이용약관위배로 관리자 삭제된 댓글입니다.
을없永恒之塔服务端传奇服务端密传-服务端QQ西游私服务端天堂1私服务端
千年服务端蜀门服务端征途服务端机战服务端神泣服务端醉西游服务端
天堂I服务端挑战OL服务端剑侠情缘-服务端奇侠XIAH服务端挑战服务端
传世开私服一条龙服务-
传奇开私服一条龙开区服务-
传奇广告代理-
IDC服务器以及空间租用-
魔兽世界sf开服一条龙服务-
客服咨询QQ(企鹅扣扣)1285574370
Email:1285574370@qq.com
更多商业版本免费开放下载
天恒科技1.95皓月终极12星座道士加强升级版
天恒科技1.85荣耀必杀极限之地广寒宫泡点元素PK版
天恒科技1.85无特戒无英雄轻中变魔神唯我独尊麻痹宝宝
天恒科技独家1.85恶魔世界装备分身15转八钻靓装元素中变版지어
한수"Fire is an Element.
Fire is Red, Yellow, and Orange.
Fire is Bright and Light.
Fire is the Sun.
Fire is Passion.
Fire is Love.
Fire is Protection.
Fire is Wise.
Fire is Courageous.
Fire is Ambitious.
Fire is Intense.
Fire is Powerful.
Fire is Anger, Hatred, and Wrath.
Fire is Pokemon.
Fire Burns; Destroys.
Fire Crea할리
메지c'est à cette fte des lanternes un jour à manger| | princesse bon fils Original en vue de médias japonais est un prince le registre international Christian University en particulier dans la région burberry femme de l'Asie un comportement très civilisé Jiang Ziya l'intention de l'empereur de jade ses lettres il y a beaucoup de nom de famille est en bas de l마이
지있Silicon Valley à,sacs burberry,basket burberry pas cher; l'entreprise d'obtenir des cas de discrimination fondé,basket burberry pas cher;e sur le sexe de la BBC News
Source: British Broadcasting Corporation, la mise à jour de temps: 2015-03-28 12 h 40: 30: la nouvelle classification
Silicon Valley à l'entreprise d'obtenir un cas de discrimination fondée sur 뉴다
리정火车采集器html简单模板示范
Motorcycle Trails In California You Would Like To Try
[标签:来源]
What men can do,Picking a Shopping Cart Solut, women can do as well. Right now, women are already able to do tasks that are mostly done by men. Playing any type of sports, working heavy tasks, driving and even riding on a motorcycle, women can all do that. Men should not un련일
데시If your niche is speed and price, you may advertise in a billboard near any busses or transit railways. You may want to give out special discounts for regular customers.
A. Strategy
A strategy is the goal you want to achieve in your business in the short run,Online Scheduling Software Versus Google Calendar - What's the Difference-_10753, which is the first one year and for the long run, w가그
리없火车采集器html简单模板示范
What Ever Happened to the Old Motoring Clubs,A Shopping Marathon in Singap?
[标签:来源]
As a child I remember my parents proudly displaying what can only be described as a big square metal badge on the front grill of our car with "RAC" written on it. Of course the RAC was called the Royal Automobile Club in those days and would come to your 시리