달력

09

« 2010/09 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

'General .NET'에 해당되는 글 59

  1. 2010/06/28 AJAX + ASP.NET
  2. 2009/11/20 ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(4)
  3. 2009/11/19 ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(3)
  4. 2009/11/18 ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(2)
  5. 2009/11/17 ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(1) (2)
  6. 2009/05/22 ASP.NET으로 웹 표준 코딩 해보기(1)
  7. 2009/03/17 웹 표준을 이용한 ASP.NET 2.0 웹 사이트 제작하기(1)
  8. 2008/11/30 Socket Class
  9. 2008/11/30 HttpWebRequest - 웹 화면 가져오기
  10. 2008/11/30 세티가 정리한 VB.NET(6) - If.....then
  11. 2008/11/30 세티가 정리한 VB.NET(5) - 값을 비교하기 위한 표현
  12. 2008/11/30 세티가 정리한 VB.NET(4) - 변수와 연산자
  13. 2008/11/30 세티가 정리한 VB.NET(3)
  14. 2008/11/30 세티가 정리한 VB.NET(2)
  15. 2008/11/30 세티가 정리한 VB.NET(1) (2)
  16. 2008/11/30 익명 메서드(Anonymous Methods)
  17. 2008/11/30 Nullable 타입
  18. 2008/11/30 DataTable.NewRow
  19. 2008/07/22 닷넷2.0을 시작하며...
  20. 2008/07/22 세티의 닷넷강좌를 다시 살리겠습니다.
  21. 2008/04/27 닷넷 전용 어셈블리
  22. 2008/04/27 델리게이트(1)
  23. 2008/04/27 C# 전처리기 지시문
  24. 2008/04/27 기초 C# - 제너릭
  25. 2008/04/11 닷넷의 소켓 클래스
  26. 2008/03/27 ASP.NET MVC Framework
  27. 2008/02/19 Interface
  28. 2008/02/18 Interface란?
  29. 2008/02/17 스마트클라이언트 서명키 만들기
  30. 2008/02/12 닷넷으로 다국어 지원 폼 만들기
2010/06/28 01:19

AJAX + ASP.NET General .NET2010/06/28 01:19

ASP.NET을 이용하여 AJAX 통신을 해보겠습니다.

먼저 아래의 그림과 같이 코딩을 합니다.


이미지를 보면 번호가 붙어 있는데요. 각 번호에 대한 설명은 아래와 같습니다.
1번 - AJAX 통신을 위해 ScriptManager를 이용합니다. ScriptManager는 참조경로로 CostService.svc 를 연결합니다.
2번 - HTML 콘트롤로 버튼을 하나 생성합니다. 클릭시 자바스크립트로 연결됩니다. Button1_onclick()를 호출합니다.
3번 - AJAX 통신으로 취합된 데이터를 출력하는 엘리먼트 입니다.


1번에 보여진 svc 설정을 위해 아래의 그림과 같은 절차를 이행합니다.
먼저 프로젝트에서 마우스 우클릭하고, Add > New Item 을 클릭합니다.
.svc 선택을 위해 AJAX-enabled WCF Service를 선택하고 Name CostService.svc 를 적어 줍니다.

Add 버튼을 클릭하고 svc를 추가합니다.
svc의 내용은 다음과 같습니다.
설명은 코드상에 주석으로 표기해 놓았습니다.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Configuration;
using System.Web.Configuration;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using Pesta.Utilities.Helpers;

//네임스페이스는 SandwichServices 입니다.
namespace SandwichServices
{

    [ServiceContract(Namespace = "SandwichServices")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class CostService : BaseCode
    {
        [OperationContract]
        public string CostOfSandwiches()
        {
            //BaseCode에서 연결 문자열을 가져옵니다.
            //코드 내용은아래에 있습니다.
            BaseCode bc = new BaseCode();
            string strConnection = bc.strConnection;

            //데이터베이스에 연결하고 오픈합니다.
            SqlConnection con = new SqlConnection();
            con.ConnectionString = strConnection;
            con.Open();

            //데이터를 가져오기 위한 쿼리 문자열을 생성합니다.
            //운영할 때 편이성을 위해 이렇게 코드에 쿼리를 넣는 것 보다는 SP로 하는게 더 낫습니다.
            string Query = string.Empty;
            Query = "select * from leeho_test";

            SqlCommand cmd = new SqlCommand(Query, con);
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adp.Fill(ds);

            //데이터 셋을 JSONHelper 객체로 보내 JSON 문자열을 생성합니다.
            Pesta.Utilities.Helpers.JSONHelper jh = new Pesta.Utilities.Helpers.JSONHelper();
            string ss = jh.ToJSON(ds);

            return ss;
           
        }
    }
}

//아래는 JSON 헬퍼 입니다.
//헬퍼 클래스는 2개의 메서드를 가지는데 하나는 데이터 셋을 인자로 받고, 다른 하나는 데이터 테이블을 직접 전달할 수
//있게 되어 있습니다.
namespace Pesta.Utilities.Helpers
{

    public class JSONHelper
    {
        #region Made from datatable of dataset to JSON string
        /// <summary>
        /// WriteDate : 2010-06-14
        /// Author : Jonghyun, Park
        /// Content: Made from DataTable of DataSet to JSON
        /// </summary>
        /// <param name="obj">DataSet</param>
        /// <returns>jsonBuilder</returns>
        public string ToJSON(DataTable dt)
        {
            return MakeData(dt);
        }
        #endregion

        #region Made from DataSet of dataset to JSON
        /// <summary>
        /// WriteDate : 2010-06-14
        /// Author : Jonghyun, Park
        /// Content: Made from DataSet of dataset to JSON
        /// </summary>
        /// <param name="obj">DataSet</param>
        /// <returns>jsonBuilder</returns>
        public string ToJSON(DataSet obj)
        {
            DataTable dt = obj.Tables[0];
            return MakeData(dt);
        }
        #endregion

        #region Make Data
        /// <summary>
        /// WriteDate : 2010-06-14
        /// Author : Jonghyun, Park
        /// Content: Make Data
        /// </summary>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        private static string MakeData(DataTable dt)
        {
            StringBuilder jsonBuilder = new StringBuilder();
            jsonBuilder.Append("[");
           
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                jsonBuilder.Append("{");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    jsonBuilder.Append("\""+ dt.Columns[j].Caption +"\":\"");
                    jsonBuilder.Append(dt.Rows[i][j].ToString());
                    jsonBuilder.Append("\",");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("},");
            }
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);

            jsonBuilder.Append("]");
            return jsonBuilder.ToString();
        }
        #endregion
    }
}


아래는 BaseCode.cs 입니다.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;

namespace SandwichServices
{
    public class BaseCode
    {
        public string DBKEY = string.Empty;
        public string GETKey = tring.Empty;
        private string dbkey {
            get {
                return DBKEY;
            }
            set {
                dbkey = DBKEY;
            }
        }
        public string strConnection = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
    }
}

   

다 되었으면 2번 내용을 준비합니다.
Button1_onclick() 함수를 자바스크립트로 만들어야 하는데요. 코드는 아래와 같습니다.

설명을 하자면....
1번 Button1_onclick 함수는 svc에서 노출된 함수를 호출합니다. 호출된 json 문자열을 2번 onSuccess 함수에 값으로 전달하게 되고 onsuccess 함수는 전달된 json 문자열을 div 엘리먼트의 id가 dvPrintData 객체에 그 값을 전달하여 출력하게 합니다.

출력 결과는 아래와 같습니다.


이상으로 AJAX + ASP.NET의 가장 기초적인 작성을 해봤습니다.


저작자 표시 비영리 변경 금지
Posted by -세티-
 

데이터베이스 레코드 목록 보기

Home 컨트롤러의 Index() 메서드는 ASP.NET MVC 애플리케이션을 위한 기본 메서드 입니다. ASP.NET MVC 애플리케이션을 실행할 때 Index() 메서드가 호출하는 첫 컨트롤러 메서드 입니다.

        public ActionResult Index()
        {
            return View();
        }


HomeController Listring 2에서 보는 것 처럼 _db라는 이름을 가지는 새로운 Private field를 가지는 코드로 수정하였습니다.

MoviesDBEntities 클래스는 데이터베이스 모델을 표현하고 통신하기 위한 클래스로 사용되기 때문에 Index() 역시 수정하였습다. Index() 메서드는 Movies 데이터베이스 테이블의 모든 movie 기록들을 가져오고 그러기 위해 MoviesDBEntities 클래스를 사용합니다. _db.MovieSet.ToList()는 Movies 데이터베이스 테이블의 movie 기록 모두를 반환하도록 합니다.


이러한 Movies
의 목록은 view를 통해서 보여줍니다. 따라서 그것이 무엇이든간에 View()는 어떤 view data라도 보여줄 수 있는 기능을 제공합니다.

[Listring 2]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MoveApp.Models;

namespace MoveApp.Controllers
{
    public class HomeController : Controller
    {
        private MoviesDBEntities _db = new Models.MoviesDBEntities();
        public ActionResult Index()
        {
            return View(_db.MovieSet.ToList());
        }

}

 

Index() 메서드는 Index라는 이름의 view를 반환합니다. 우리는 movie 데이터베이스 레코드 리스트를 보여주기 위해 view를 생성할 필요가 있습니다.

그것의 절차는 다음과 같습니다.


 

Add New 다이얼로그가 오픈되기 전이나 View data class 드롭다운 리스트 내에 클래스가 나타나지 않을 때 메뉴 옵션의 Build, Build Solution을 선택해서 프로젝트를 빌드해야만 합니다.


1.    
코드 편집기에서 Index() 메서드를 우클릭하고 메뉴 옵션에서 Add View를 선택합니다.
2.     Add View 다이얼로그에서 Create a strongly-typed view를 체크합니다.
3.     View Content 드롭다운 리스트에서 List의 값을 선택합니다.
4.     View data class 드롭다운 리스트에서 MovieApp.Models.Movie를 선택합니다.


                                  (
그림 9: 컨트롤러 action에 하나의 뷰를 추가하기)



Index view
HTML 테이블 내에 Movies 데이터베이스 테이블의 모든 movie 기록을 보여줍니다. view ViewData.Model 프로퍼티에 의해 각각의 movie를 표현하는 이터레이터와 foreach 루프를 포함하고 있습니다F5키를 눌러서 애플리케이션을 실행하고 렌더링 된 화면을 확인합니다.

새로운 데이터베이스 레코드 생성하기

Index는 이전 섹션에서 새로운 데이터베이스 레코드 생성을 위해 링크를 포함하여 뷰를 생성하는 것을 보여주었습니다. 새로운 데이터베이스 레코드 생성을 위해선 로직을 먼저 만들고 즉시 뷰를 생성해야 합니다.

Home 컨트롤러는 Create()라는 2개의 메서드를 포함하고 있습니다.


첫번째 Create() 메서드는 파라미터를 가지고 있지 않다. Create() 메서드의 오버로드는 새롭게 생성된 movie 데이터베이스 레코드를 HTML 폼에서 보여주기 위해 사용됩니다.

두번째 Create() 메서드는 FormCollection 파라미터를 가지고 있습니다. Create() 메서드 오버로드는 서버에 포스트된 새로운 movie를 생성하고 HTML이 조직화 될 때 호출됩니다. 두번째 Create() 메서드의 주의할 점은 HTTP POST 조작 이행을 제외한 그 이전에 호출되는 메서드인 AcceptsVerbs 애트리뷰트를 가진다는 것 입니다. 이 두번째 Create() 메서드는 Listing 4에서 보는 것 처럼 HomeController 클래스가 수정되어 있습니다. Create() 메서드의 새버전은 Movie 데이터베이스 테이블에 새로운 movie를 포함하는 로직을 포함하고 Movie 파라미터를 받아들입니다.

 Bind 애트리뷰트를 주의하라. 왜냐하면 우리는 HTML 폼에서 Movie ID 프로퍼티를 업데이트 하지 않기를 원한다. 이 프로퍼티는 매우 필요하기 때문이다

 

Listing 4 – Controllers\HomeControllers.cs(modified Create method)

//
// GET: /Home/Create 
public ActionResult Create()
{

       return View();

}

//
// POST: /Home/Create 
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")] Movie movieToCreate)
{
       if (!ModelState.IsValid)
          return View();
      _db.AddToMovieSet(movieToCreate);
      _db.SaveChanges();
     return RedirectToAction("Index");

}

Visual Studio는 하나의 새로운 movie 데이터베이스 레코드(그림 12를 보라.)를 생성하는 폼으로 쉽게 만들 수 있습니다. 다음의 절차를 따라하세요.

1.     코드 편집기에서 Create() 메서드를 우클릭하고 메뉴 옵션에서 Add View를 선택한다.
2.     Create a strongly-typed view를 체크한다.
3.     View content 드롭다운 리스트에서 값으로 create를 선택한다.
4.     View data class 드롭다운 리스트에서 MovieApp.Models.Movie를 선택한다.
5.     Add 버튼을 클릭해서 새로운 뷰를 생성한다.



(그림 12: Create 뷰 추가하기)


 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MoveApp.Models.Movie>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% using (Html.BeginForm()) {%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="Id">Id:</label>
                <%= Html.TextBox("Id") %>
                <%= Html.ValidationMessage("Id", "*") %>
            </p>
            <p>
                <label for="Title">Title:</label>
                <%= Html.TextBox("Title") %>
                <%= Html.ValidationMessage("Title", "*") %>
            </p>
            <p>
                <label for="Director">Director:</label>
                <%= Html.TextBox("Director") %>
                <%= Html.ValidationMessage("Director", "*") %>
            </p>
            <p>
                <label for="DataReleased">DataReleased:</label>
                <%= Html.TextBox("DataReleased") %>
                <%= Html.ValidationMessage("DataReleased", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

 


HTML 폼에 Id 폼 필드가 Add View 다이얼로그에 의해 추가된다. 왜냐하면 Id 컬럼은 독립적인 컬럼입니다. 여기서 이 폼 필드는 필요가 없으므로 안전하게 삭제할 수 있습니다.

Create 뷰가 추가된 후에 데이터베이스에 새로운 Movie 레코드를 추가할 수 있습니다. F5키를 이용해서 애플리케이션을 실행하면 그림 13의 폼에서 보이는 것처럼 새로운 링크가 보이고 클릭할 수 있습니다. 폼 전송이 완벽하다면 새로운 데이터베이스 레코드가 생성됩니다. 자동적으로 폼 벨리데이션을 얻을 수 있는 것에 주의하세요. 만약 movie의 릴리지 시간이나 잘못된 릴리즈 데이터를 입력하면 아래의 그림에서 보는 것처럼 하이라이트 처리된 데이터 필드를 표현할 것이다.


                       (그림 13: 새로운 movie 데이터베이스 레코드를 생성하는 것)

 

기존 데이터베이스 레코드 수정하기

앞 섹션에서 우리는 새로운 데이터베이스 레코드의 목록과 생성을 어떻게 하는지 알아 보았습니다. 마지막 섹션에서는 기존의 데이터베이스 레코드를 어떻게 수정하는지 알아 보겠습니다.

첫번째로 우리는 하나의 수정 폼을 추가할 것 입니다. 이 절차는 Visual Studio로 하면 쉽고 자동적으로 수정 폼을 추가할 수 있습니다. Visual Studio 코드 편집기 내에서 HomeController.cs.class 파일을 열고 다음의 절차를 수행하세요.

1.     코드 편집기 내의 Edit() 메서드에서 우클릭하고 메뉴 옵션에서 Add View를 선택한다.(그림 14를 볼 것.)

2.     Create a strongly-typed view를 체크해라.

3.     View content 드롭다운 리스트에서 값을 Edit 를 선택한다.

4.     View data class 드롭다운 리스트에서 MoieApp.Models.Movie 값을 선택한다.

5.     Add 버튼을 클릭하여 새로운 뷰를 생성한다.

 

Views\Home 폴더 내에 Edit.aspx라는 이름의 새로운 뷰를 추가한다. 이 뷰는 movie 레코드 수정을 위한 HTML 폼이 포함되어 있습니다.

                                          (그림 14: Edit View 추가하기)


Edit 뷰는 Movie Id 프로퍼티가 조합된 HTML 폼 필드를 포함하고 있다. Id 프로퍼티의 값을 수정해서는 안된다. 따라서 폼 필드에서 삭제해야만 한다.

마지막으로 우리는 데이터베이스 레코드 수정을 지원하기 위해 Home Controller를 수정할 필요가 있습니다. HomeController Listing 6에 포함된 클래스처럼 수정되었습니다.

 //
// GET: /Home/Edit/5

public ActionResult Edit(int id)

{

        var movieToEdit = (from m in _db.MovieSet
                           where m.Id == id
                           select m).First();

        return View(movieToEdit);

}

//
// POST: /Home/Edit/5 
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Movie movieToEdit)
{

        var originalMovie = (from m in _db.MovieSet

                             where m.Id == movieToEdit.Id
                             select m).First();

        if (!ModelState.IsValid)
                    return View(originalMovie);

            _db.ApplyPropertyChanges(originalMovie.EntityKey.EntitySetName, movieToEdit);
            _db.SaveChanges(); 

        return RedirectToAction("Index");

}

Listing 6에서 로직 양쪽에 Edit() 메서드 오버라이드를 추가 했습니다. 첫번째 Edit() 메서드는 Id 파라미터를 전달받은 메서드에 의해 movie 데이터베이스 레코드를 반환합니다. 두번째 오버로드는 movie 레코드 업데이트에 영향을 끼칩니다. 기존의 movie를 업데이트 하기 위해 ApplyPropertyChanges()를 호출하고 나서 원본 movie를 찾아와야 합니다.

 

Summary

이 튜터리얼의 목적은 ASP.NET MVC 애플리케이션 제작을 위한 경험을 주는 겁니다. 이 경험을 통해 ASP or ASP.NET 애플리케이션 제작 경험을 가진 사람이 ASP.NET MVC 애플리케이션을 제작하는 것이 매우 간단한 일임을 발견했기를 희망합니다. 이 튜터리얼에서 우리는 ASP.NET MVC 프레임워크의 대부분의 기본적인 특징을 조사했습니다. 이후의 튜터리얼에서는 컨트롤러 액션, , 뷰 데이터, 그리고 HTML 헬퍼와 같은 토픽을 다뤄볼 것입니다.

저작자 표시 비영리 변경 금지
Posted by -세티-

모델 생성하기
데이터베이스 모델을 생성하고 표현하기 위해 클래스 집합이 필요합니다. 마이크로소프트 엔티티 프레임워크의 이점은 데이터베이스 모델을 자동으로 생성해주는 클래스들을 가지고 있습니다.


ASP.NET MVC 프레임워크는 마이크로소프트 엔티티 프레임워크를 지원하지 않습니다. LINQ, Subsonic 그리고 NHibernate가 포함된 Object Relational Mapping(OR/M)를 활용하면 데이터베이스 모델 클래스들을 생성할 수 있습니다.



Entity Data Model Wizard
를 시작하기 위해 다음의 절차를 따릅니다.

1.      솔루션 탐색기내의 모델 폴더를 우클릭하고 메뉴 옵션에서 Add, New Item을 선택합니다.

2.      Data 카테고리를 선택하고 ADO.NET Entity Data Model 템플릿을 선택합니다.



3.      MovieDBModel.edmx라는 이름의 데이터 모델을 당신에 주고 Add 버튼을 클릭합니다.

Add 버튼을 클릭한 후에 Entity Data Model Wizard가 그림 6처럼 나타난다. Wizard를 완벽하게 사용하기 위해서 다음 스텝으로 진행합니다. 

Choose Model Contents 스텝에서 Generate from database 옵션을 선택합니다.
Choose Your Data Connection 스텝에서 MovieDB.mdf 데이터 연결을 사용합니다.
그리고 연결을 설정할 때 MoviesDBEntities로 이름으로 만들고 Next 버튼을 클릭합니다.
Choose Your Database Objects 스텝에서 테이블 노드를 확장하고 Movies 테이블을 선택합니다.
MovieApp.Models
라는 네임스페이스를 입력하고 Finish 버튼을 클릭한다.


 


Entity Data Model Wizard 완료한 후에 Entity Data Model 디자이너를 오픈하면 해당 디자이너는 그림 7과 같은 Movies 데이터베이스 테이블을 보여줍니다.


(그림 07: Entity Data Model Designer)

계속 작업을 이어가기 위해선 그 전에 한 가지를 변경해야 합니다. Entity Data Wizard Movies 데이터베이스 테이블을 표현하기 위해 Movies라는 이름의 모델 클래스를 추가해야 합니다. 왜냐하면 우리는 개별적인 movie를 표현하하는데 Movies 클래스 라는 것을 사용할 것이 때문입니다. 따라서 우리는 Movies대신에 movie 클래스 라는 이름으로 수정할 필요가 있습니다.

 

디자이너에서 클래스 이름을 더블-클릭하고 Movies라는 이름을 Movie로 이름을 변경합니다. 변경한 후에 Movie 클래스 추가를 위해 Save 버튼을 클릭합니다.

ASP.NET MVC 컨트롤러 생성하기

다음은 ASP.NET MVC 컨트롤러를 생성하는 절차입니다. 하나의 컨트롤러는 ASP.NET 애플리케이션과 사용자 사이에서 어떻게 인터렉션하며 하는가를 알아보겠습니다.

우선 다음의 절차를 따릅니다.

1.     솔루션 탐색기에서 컨트롤러 폴더를 오른쪽 클릭하고 메뉴옵션에서 Add, Controller를 선택합니다.

2.     Add Controller 다이얼로그에 HomeController라고 입력하고 Add action methods for Create, Update, and Details scenarios를 체크합니다.

3.     프로젝트에 새로운 컨트롤러를 추가하기 위해 Add를 클릭한다.


 
(그림 08: 새로운 ASP.NET MVC 컨트롤러를 추가)


아래는 자동으로 생성된 HomeController.cs의 코드 입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MoveApp.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View();
        }

        //
        // GET: /Home/Details/5
        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Home/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Home/Create
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Home/Edit/5
        public ActionResult Edit(int id)
        {
            return View();
        }

        //
        // POST: /Home/Edit/5

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}


다음에 이어서...
저작자 표시 비영리 변경 금지
Posted by -세티-

데이터베이스 생성하기

Movie 데이터베이스 레코드를 위해 하나의 데이터베이스르 생성해야할 필요가 있다.

운좋게도 Visual Studio SQL Server Express라는 이름을 가진 프리 데이터베이스를 포함하고

있다. 다음의 절차에 따라 데이터베이스를 생성한다.

1.      솔루션 탐색기 윈도우내의 App_Data 폴더를 우클릭하고 Add, New Item을 선택한다.

2.      Data 카테고리를 선택하고 SQL Server Database 템플릿을 선택한다.(그림 3 참조)

3.      새로운 데이터베이스의 이름을 MoviesDB.mdf라 하고 Add 버튼을 클릭한다.

 

데이터베이스를 생성한 후에 App_Data 폴더안에 위치한 MoviesDB.mdf를 더블 클릭해서 데이터베이스에 연결한다. MovieDB.mdf를 더블클릭하면 Server Explorer Window가 열린다.

Server Explorer window Visual Web Developer에서는 Database Explorer 이라는 이름을 가진다.

(그림 3: Microsoft SQL Server Database 생성하기)


다음으로 새로운 데이터베이스 테이블을 생성한다. Server Explorer window안에서 테이블 폴더를

우클릭하고 메뉴 옵션 Add New Table을 선택한다. 이 메뉴 옵션을 선택하면 데이터베이스 테이

블 디자이너를 오픈한다.

데이터베이스 컬럼들을 다음에 따라 생성한다.

컬럼명

데이터 타입

널 허용여부

Id

Int

False

Title

Nvarchar(100)

False

Director

Nvarchar(100)

False

DataReleased

DateTime

False

 

첫 컬럼, Id컬럼은 2개의 특별한 프로퍼티를 가진다. 첫째로, Id컬럼은 Primary Key컬럼으로 마킹 되어야 한다. Id 컬럼을 선택하고 Set Primary Key 버튼을 클릭한다. 두번째로 Id컬럼의 프로퍼티인 Identity Yes로 선택한다.

컬럼 프로퍼티 윈도우내에서 Identity Specification 영역을 스크롤 다운한다.

Is Identity 프로퍼티의 값을 Yes로 변경한다. 모두 완료되면 그림 4처럼 보일 것이다.


(그림 04: Movies 데이터베이스 테이블)

마지막 작업으로 새로운 테이블을 저장한다. 이 테이블의 이름을 주고, Save를 클릭한다.

테이블이 생성된 후에 테이블에 movie 레코드를 추가한다. Server Explorer window내의 movie 테이블을 우클릭하고 메뉴 옵션에서 Show Table Data를 선택한다. 아래가 해당 그림이다.


(그림 05: movie 레코드들)

다음에 이어서....
저작자 표시 비영리 변경 금지
Posted by -세티-

날씨가 많이 추워졌습니다. 신종플루 뿐만이 아니라 구종(?)플루도 조심하세요~
아프면 몸도 마음도 괴롭습니다.^^

오랜만에 글을 써봅니다. 지금 올리는 글은 오래전에 번역해둔 글인데 이제서야 올리게 되었네요.
중간중간 번역이 이상할 수도 있고, 원문 번역이 잘 안되는 경우엔 그냥 의역 했음을 밝힙니다.
원문 출처는 다음과 같습니다.




원문 : http://www.asp.net/learn/mvc/tutorial-21-cs.aspx

 이 튜터리얼은 ASP.NET MVC 애플리케이션이 ‘과연 어떤 점이 좋은가?’에 대한 감을 여러분들에게 느끼게 하는게 목적입니다. 그러한 감을 이 튜토리얼을 통해 시작부터 끝까지 ASP.NET MVC 애플리케이션을 제작해 나가는 전체 작업 과정을 통해 발산하고자 합니다. 나는 이 튜토리얼에서 리스트 조회, 생성 그리고 수정 같은 것들을 어떻게 데이터베이스에 기록하는지 일러스트레이터로 설명하고 간단한 데이터베이스-드리븐 애플리케이션을 빌드하는지 보여주고자 합니다.

 

우리는 애플리케이션 빌딩 프로세스를 간편하게 하기 위해 Visual Studio 2008(여기서 저는 Visual Studio 2010 베타 버전을 사용했습니다.) 을 이용할 것입니다. 이러한 Visual Studio에 컨트롤러, 모델들 그리고 뷰를 위한 코드와 컨텐츠를 추가할 것입니다.

 

만약에 당신이 ASP ASP.NET으로 작업한다면 ASP.NET MVC very familiar를 찾아야만 합니다. ASP.NET MVC 뷰어는 ASP 애플리케이션 같은 페이지 입니다. 그리고 전통적인 ASP.NET 웹 폼 애플리케이션처럼 ASP.NET MVC는 닷넷프레임워크가 제공하는 풍부한 언어와 클래스들을 이용해서 접근할 수 있다.

 

이 튜토리얼을 통해 내가 희망하는 부분은 ASP.NET MVC 애플리케이션 제작이 ASP ASP.NET Web Form 애플리케이션 제작경험과 비교하여 얼마나 다른지 보여주고자 합니다.

 

Overview of the Movie Database Application

간단한 목표를 달성하기 위해 심플한 Movie 데이터베이스 애플리케이션을 제작할 것 입니다. Movie 데이터베이스 애플리케이션을 만들기 위해선 먼저 기본적으로 3가지를 준비해야 합니다.

1.     Movie 데이터베이스 기록인 리스트 셋

2.     새로운 movie 데이터베이스 레코드를 생성한다.

3.     Movie 데이터베이스 레코드를 수정한다.


우리가 이렇게 간단한 애플리케이션을 만드는 이유는
ASP.NET MVC 프레임워크의 최소한의 중요한 특징을 알기 위해서 입니다. 우리는 애플리케이션을 생성하기 위해 고려해야 할 것이 있고, 그것은 다음의 절차를 완벽하게 따라하면 해결됩니다.

1.     ASP.NET MVC Web Application 프로젝트를 생성한다.

2.     데이터베이스를 생성한다.

3.     데이터베이스 모델을 생성한다.

4.     ASP.NET MVC 컨트롤러를 생성한다.

5.     ASP.NET MVC 뷰어를 생성한다.

 

Preliminaries

ASP.NET MVC application 제작을 위해 Visual Studio 2008(or Visual Studio 2010 Beta) 또는 Visual Web Developer 2008 Express 가 필요합니다. 또한 다운로드된 ASP.NET MVC Framework가 필요합니다.

만약에 Visual Studio 2008을 가지고 있지 않다면 다음의 웹 사이트에서 90일간 사용할 수 있는 Visual Studio 2008 트라이얼 버전을 얻을 수 있습니다.

 

VS2008 : http://msdn.microsoft.com/en-us/vs2008/products/cc268305.aspx
VS2010 : http://www.microsoft.com/visualstudio/ko-kr/try/default.mspx#download

 

둘중에 하나를 선택해야 겠지만 ASP.NET MVC application Visual Web Developer Express 2008을 이용해서 생성할 수도 있습니다. 만약에 Visual Studio Express를 이용해서 개발하기로 결정했다면 Service Pack 1을 인스톨 한 후 VWD를 설치해야 합니다. Visual Web Developer Express Service Pack1을 다운로드 받기 원하면 아래의 웹 사이트에서 구할 수 있습니다.

 

http://www.microsoft.com/downloads/details.aspx?FamilyId=BDB6391C-05CA-4036-9154-6DF4F6DEBD14&displaylang=en

 

ASP.NET framework ASP.NET MVC framework를 개별적으로 다운로드 하는 대신에 Web Platform Installer로 쉽게 얻을 수 있다. Web Platform Installer는 당신의 컴퓨터에서 application을 쉽게 관리할 수 있도록 활성화 시켜주는 application이다.

 

Creating an ASP.NET MVC Web Application Project

. Visual Studio 2008내의 새로운 ASP.NET MVC Web application을 생성함으로써 시작해 보도록 합시다.

 

Menu 옵션에서 File, New Project를 선택합니다.

그러면 그림1에서 처럼 새로운 프로젝트 다이얼로드 상자(Project dialog box)를 보게 될 것입니다.

프로그래밍 언어로 C# ASP.NET MVC Web Application을 선택합니다.


(그림 01: 새로운 프로젝트 다이얼로그 상자)

 

 

ASP.NET MVC Web Application 프로젝트 템플릿이 나타나지 않는다면 새로운 프로젝트 다이얼로그 상자의 상단에 있는 .NET Framework 3.5를 선택해야 한다. (참고로 VS2010 Ultimate 베타 버전에는 ASP.NET MVC2가 포함되어 있습니다.)

 

새로운 MVC Web Application 프로젝트를 생성할려고 하면 분리된 unit test 프로젝트를 생성하겠냐라는 프롬프트가 보입니다. 아래 그림 2와 같은 다이얼로그 입니다. 이 튜터리얼에서는 테스트를 생성하지 않습니다. 왜냐하면 MVC에 대한 맛을 보는게 더 중요하기 때문입니다.


우선은 NO
옵션을 선택하고 OK 버튼을 클릭합니다.

 

Visual Web Developer는 테스트 프로젝트 기능을 지원하지 않는다.


 

(그림 02: 유닛 테스트 프로젝트 다이얼로그를 생성한다.)

 


ASP.NET MVC 애플리케이션은 하나의 폴더 표준 집합을 가지고 있습니다.: 모델, , 그리고 컨트롤러 폴더 작업자는 솔루션 탐색기 윈도우내의 폴더들에서 이 폴더들의 표준집합을 볼 수 있습니다. 우리는 Movie를 빌드하기 위해 모델, , 컨트롤 폴더 각각에 파일들을 추가할 것입니다. Visual Studio로 하나의 새로운 MVC 애플리케이션을 생성하면 샘플 애플리케이션을 얻을 수 있습니다.

이렇게 생성된 애플리케이션을 이용하여 무언가를 시작하고자 한다면 이 간단한 샘플의 컨텐츠를 지워야 할 필요가 있습니다. 따라서 다음의 폴더와 파일들을 지워야 합니다.

- Controllers\HomeController.cs
- Views\Home



다음에 이어서.....

저작자 표시 비영리 변경 금지
Posted by -세티-

안녕하세요. 세티 입니다. 요즘 글쓰기가 매우 뜸합니다.^^

인터넷에
좋은 자료들이 너무 많다 보니 하나를 쓸려고 해도 어떤 주제로 글을 쓸까 하는 고민을 하게 됩니다. 그렇게 고민하다 보면  시기를 놓치기도 하고, ‘나중에 써야지.’ 했다가 기억도 못하고 그럽니다.^^;; 그것도 그렇고 지난 1년간은 닷넷을 다룰 일이 없었습니다.  1년간 표준 기술(HTML+CSS+JavaScript) 관련된 일을 했는데 곳에서 많이 배웠습니다.

많은 기회와 관심을 보여준 곳이었지만 제가 적응을 못했다고 보는 맞겠네요. ^^ 사실 회귀본능도 강하게 작용했구요.

아무튼새로운 곳에서 이것저것 잡다구리하게 일하고 있는데, 개발 표준 잡다가 심심해서 표준 코딩과 닷넷을 결합해서 샘플을 하나 만들어 봤습니다.

사실 인터넷에 알려진 내용이라 새로울 없지만, 공유라는 차원에서 기록으로 남겨봅니다.~



표준이란?

정보공학 측면에서 문서의 구조에 의미를 부여하자는 것이고, 그것을 사용하는 사용자들이 어떤 조건적 제약없이 쉽게 웹에 접근하여 이용 가능하도록 보장하는 것이라고 생각합니다.

문서의 구조에 의미를 부여한다는 것은 <bold>홍길동</bold> 처럼 무언가 강조되어야 글자에 디자인 의미를 가진 마크업을 사용하기 보단 <strong>홍길동</strong> 처럼 의미있는 테그 사용을 통해 문서의 구조를 만들자는 것입니다. 개발적 측면에서는 기존의 디자인+마크업+행위가 하나의 페이지에 모두 녹아있는 형태가 아닌 HTML, CSS, Javascript 각각 분리하여 관리상의 이점을 가져가자는 측면도 있는 것입니다.

 이러한 컨셉을 기반으로 닷넷으로 간단한 샘플을 만들어 보았습니다
첫번째 샘플은 다음의 조건을 가집니다
.

페이지 자체는 HTML, CSS, Javascript 구분하되 테이블의 렌더링은 C#에서 한다.’

먼저 웹페이지를 만들겠습니다.
페이지의 기본 구조는 다음과 같습니다.

 

타이틀 요소

 

 

 

메뉴요소

 

 

 

본문 요소

 

바닥글

 

 

구조를 만들기 위해 구조를위한 마크업과 CSS 생성했습니다.

코드는 아래와 같습니다.

 

HTML 코드

 

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="OneMaster.aspx.cs" Inherits="CELSSample_OneMaster_OneDetail_OneMaster" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

<link href="/Css/CELSSample.css" rel="stylesheet" type="text/css" />

</head>

<body>

    <form id="form1" runat="server">

       <!Outer Wrap à

<div id="wrap">

 

    <! Title 영역 à

            <div id="title">

                <p class="titMsg">One Master Sample</p>

            </div>

 

            <! 메뉴 영역 à

            <div id="menu">

                <span class="menuTitle">메뉴</span>

</div>

 

<! 본문 영역 à

            <div id="main">           

                <! 본문에 들어갈 내용이 위치함 à

            </div>

 

           <! 바닥글 영역 à

           <div id="bottom">

<p class="bottomMsg">Copyright (c) KPS. All rights reserved.</p>

</div>

 

</div>

   </form>

</body>

</html>

 

 

위의 코드를 보시면 문서 내부에 디자인 요소가 하나도 없음을 확인할 수 있습니다.

마크업을 데코레이션 하는데 필요한 CSS를 하나 생성합니다.

 

코드는 아래와 같습니다.

 

CSS 코드

 

 

body { background:#FFFFFF; font-size:12px; font-family:돋움; color:#333333; }

ul { list-style:none; padding:0; }

#wrap { width:1000px; margin:0 auto; }

#title { height:50px; text-align:center; }

#menu { float:left; width:130px; }

#main { float:left; width:850px; }

#bottom { float:left; width:1000px; height:30px; }

.titMsg { padding-top:20px; color:#1425D0; font-family:돋움, dotum; font-size:14px; font-weight:bold; }

.bottomMsg { padding-top:9px; text-align:center; font-size:10pt; font-family:돋움; }

.menuTitle { height:20px; background:#DEB887; text-align:center; width:130px; display:block; padding-top:8px; }

 

 

이렇게 마크업과 디자인을 구분하여 유지보수성을 높여줍니다. 기왕 만드는 김에 JS부분도 미리 만들어 놓겠습니다.


이렇게 해서 웹표준 코딩을 닷넷으로 적용하기 위한 준비를 끝냈습니다. 

이제 이 웹 페이지 구조에 어떤 데이터를 읽고, 그것을 Html Table로 만들어서 보여줄려고 합니다. DataList를 사용하면 편하게 그릴수 있지만 웹 페이지 요소는 불가피한 경우를 제외하곤 ASP.NET 컨트롤의 사용을 최소화 하려고 합니다.

그런 의미에서 HtmlDataList 객체를 이용해서 표를 출력하고자 합니다.

저작자 표시 비영리 변경 금지
Posted by -세티-

원글 : http://msdn.microsoft.com/ko-kr/library/aa479043(en-us).aspx#aspnetusstan_topic17

아래의 내용은 원글을 번역한 내용입니다.

마이크로소프트의 ASP.NET 2.0은 디자인과 XHTML과 접근성있는 표준 웹 사이트를 제작하는데 도움을 주는 많은 특징을 가지고 있습니다. 이 아티클은 표준 규격 사이트를 제작하는 방법에 대해 도움을 줍니다.

1. Introduction
웹 표준은 최소한의 작업으로 광범위한 이용자들이 접근할 수 있는 웹 사이트를 제작할 수 있게 해줍니다. 웹 표준의 추가적인 헤택은 장애를 가진 분들이 쉽게 웹 사이트에 접근할 수 있도록 만드는 것입니다. 시력을 잃은 사람부터 팔을 잃은 모든 사람까지 포함하는 매우 광범위한 이용자들을 대상으로 합니다. 물론 표준 이전에는 웹 사이트를 이용하는데 있어 일시적인 장애나 영구적인 장애를 가진 사람들은 그 이용에 장벽이 존재했었습니다.
마이크로소프트 ASP.NET 2.0 프레임워크는 웹 표준을 준수하는 웹사이트 제작을 위한 최적의 프레임워크로 디자인 되었습니다. 특히 ASP.NET 2.0 프레임워크에 포함된 대부분의 컨트롤은 XHTML과 접근성 표준화에 대비해서 광범위하게 리뷰되고 테스트 되었습니다. 게다가 마이크로소프트 Visual Studio2005는 웹 페이지의 XHTML과 접근성 표준화를 대비하는 새로운 도구를 포함하고 있습니다.
이 페이퍼의 목적은 XHTML과 접근성 표준화를 소개하고 그리고 이러한 표준을 접하기 위해 ASP.NET 2.0과 Visual Studio 2005를 어떻게 이용하는지를 설명합니다. 이 페이지의 끝에서 XHTML과 접근성 표준화를 만족하는 ASP.NET 2.0 웹 사이트를 생성하기 위한 step-by-step을 제공받을 수 있습니다.

2. XHTML 웹 사이트 제작하기
HTML은 오래된 기술 입니다. 월드와이드웹 컨소시엄은 2000년 1월 26일에 XHTML의 첫번째 버전을, 배포했습니다. XHTML 표준은 HTML을 대체할 것 입니다. W3C에 따르면 "XHTML은 HTML의 후임이다." 라고 했습니다.(http://www.w3.org/MarkUp/).

HTML 표준의 작성법은 일반적으로 2개의 목표를 가집니다.
  • 문서구조와 표현을 분리하기
  • XML의 애플리케이션으로 HTML을 다시 공식화 하기


첫번째 목표에서 추구하는 것은 W3C가 HTML로 부터 엘리먼트와 애트리뷰트의 표상적인 것을 점차적으로 지워나가는 것이다.(HTML4.0에서 시작되었다.)
예를 들어서 XHTML 1.0 Strict 는 <font> 테크와 같은 엘리먼트와 bgcolor 애트리뷰트와같은 애트리뷰트를 포함하지 않습니다. 왜냐하면 이들 엘리먼트와 애트리뷰트는 하나의 문서표현을 묘사하는데만 사용되고 문서의 구조와는 관계가 없기 때문입니다.
W3C는 어떤 특정 테그가 특별한 표현을 가지는 생각을 웹 사이트 디자이너와 개발자로 부터 떼어낼 시도를 하였습니다. 예를 들어서 <h1> 테그의 목적은 페이지에서 큰 볼드 텍스트를 렌더하기 위한 목적을 가집니다. <h1>테그는 문서에서 헤드부분이나 그 밖에 와 같은 부분을 마크 하는데 사용되어 집니다. 그것은 렌더과정에서 헤딩 테그가 결정되어 브라우저에 나타나게 됩니다. 시력이 좋지 않은 사람이 스크린 리더를 사용하면 해당 부분을 소리내어 읽어줍니다. PDA는 깜빡거리는 텍스트나 헤딩 테그의 내용을 렌더링 할 때 멀티 폰트 사이즈를 지원하지 않습니다.
그래서 <h1>과 같은 테그를 사용할 때는 웹 페이지의 표현을 위해 사용하지 말아야 합니다. 대신에 웹 페이지에 어떤 표현을 사용하고자 할 경우는 CSS를 통해서 그것을 표현해야 합니다. 되도록이면 CSS는 외부 CSS이어야만 합니다. 테그와 애트리뷰트는 문서구조를 마크 하는데 사용되어야 하고 CSS는 문서의 표현을 위해 사용되어야 합니다.

XHTML의 두번째 목표는 HTML 개발에서 XML의 엄격한 규칙을 실시하는 것 입니다. W3C에서는 "HTML 1.0은 XML 1.0 애플리케이션 처럼 HTML 4.01을 재표현한 것이다."(http://www.w3.org/MarkUp/). 바꿔말하면 XHTML을 사용하여 웹 페이지를 작성할 때 실질적인 XML 문서를 생성할 수 있습니다.
XML 문서는 HTML 문서보다 엄격한 문법을 가집니다. 예를 들어서 XML은 대문자와 소문자를 구별하고 모든 XML 애트리뷰트는 인용부호를 사용해야만 하고 XML 테그는 중복될 수 없어야 합니다. 웹 사이트 개발자와 디자이너는 언어에서 요구되는 규칙의 많은 이점을 따라야 합니다. XHTML 마크업으로 작성된 페이지의 이점 중 하나는 크로스-브라우저, 크로스-디바이스, 그리고 서로 호환할 수 있는 크로스-운영체재에 완벽하게 호환된다는 것 입니다. 브라우저에서 전통적인 HTML 페이지를 열었다면 해당 브라우저는 페이지를 렌더 합니다. 해당 브라우저는 페이지를 렌더하는데 엉망으로 작성된 HTML 페이지라도 렌더를 시도할 것입니다. 아래의 코드를 인터넷 익스플로러(그리고 파이어폭스 그리고 오페라)는 HTML 페이지로 정교하게 디스플레이할 것입니다.

<i><B>this is bold and italic</I> and this is bold
</body></HTML>

인터넷 익스플로러는 이 페이지를 운좋게 디스플레이 할 것입니다. 위의 코드에서 <html> 오픈이 없고, <body> 오픈 테그도 없으며 <b>테그는 닫혀 있지 않고 <i> 테그는 오픈/클로즈가 맞지 않지만 대부분의 메이저 브라우저는 HTML테그의 "tag 수프"를 제공하므로 어떤 것이든 렌더를 시도할 것입니다.
이러한 브라우저의 행위는 위험합니다. 왜냐하면 다른 브라우저들은(다른 운영체재 에서 실행되는 브라우저나 같은 브라우저의 상위 버전) 서로 다른 방법으로 렌더를 할 것이기 때문입니다. 실질적인 핵심은 인터넷 익스플로러, 모질라 파이어폭스, 그리고 오페라의 최종 버전은 타당하지 않은 HTML 렌더를 놀랍게도 일관성 있는 방법으로 수행합니다.

저작자 표시 비영리 변경 금지
Posted by -세티-
2008/11/30 23:58

Socket Class General .NET2008/11/30 23:58


필요한 네임스페이스

System.Net, System.Net.Sockets

 

System.Net.Sockets.Socket 클래스의 특징

- 클라이언트 응용프로그램과 서버 응용 프로그램에서도 소켓으로 사용 가능

- 동기, 비동기 동작을 모두 사용가능

 

endpoint

- 네트워크 케이블의 양 끝(종단점)

- 네트워크에 대한 읽기, 쓰기를 수행

 

클라이언트와 서버 응용 프로그램은 소켓 연결을 통해서 통신하고 바이트 스트림을 주고 받는다. 다른 소켓으로 메시지를 보내기 위해서는 응용 플로그램을 제공하는 PC의 아이피 주소와 소프트웨어의 프로세스 식별자를 알아야 한다.

PC에서 소프트웨어 프로세스 식별자는 포트라고 하는 고유한 숫자를 사용.

따라서 응용 프로그램에서 연결의 반대편 끝에 있는 다른 소켓에 메시지를 전달하려면 상대편 IP주소와 응용 프로그램의 포트 번호를 알아야 한다.

 

닷넷 프레임워크에서는 소켓의 기능을 System.Net.Sockets.Socket 클래스로 제공.

인터넷을 사용하는 소켓 응용 프로그램을 작성하므로 AddressFamily.InterNetwork를 사용한다.

 

[소캣구성]

소켓 객체를 생성하고 사용하기 위한 Socket 클래스의 생성자

public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)

 

소켓 객체의 생성자는 3가지 열거형 AddressFamily, SocketType, ProtocolType을 인자로 받으며 각 열거형은 System.Net.Sockets 네임스페이스에 정의되어 있다.

 

AddressFamily 열거형

- Socket 객체가 주소를 풀이하기 위해 사용하는 주소 지정 스키마를 정의.

- 여기서는 인터넷을 사용하므로 AddressFamily.InterNetWork를 사용.

 

SocketType 열거형

- 소켓의 종류를 지정, 가장 많이 사용되는 소켓의 종류는 SocketType.Stream

- Stream은 양방향 연결 기반 바이트 스트림을 제공.

 

ProtocolType 열거형

- 소켓이 통신을 하기 위해 사용하는 저수준 프로토콜의 종류를 지정.

- TCP, AddresssFamily.InterNetwork를 사용해야 함.

 

) 소켓객체의 인스턴스를 생성

Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

 

[원격서버에 연결하기]

Socket클래스의 Connect()를 사용하여 원격서버에 연결.(동기적 시도)

Connect() 메소드의 서명

- public void Connect( EndPoint remoteEP);

 

Connect() 메소드 인자

- System.Net.EndPoint 클래스의 인스턴스

- EndPoint 클래스는 추상 클래스로 네트워크 주소를 의미한다

- EndPoint 클래스의 하위 클래스는 System.Net.IPEndPoint

- Connect() 메소드를 사용할 때는 연결하려는 원격 서버의 IP 주소와 포트 번호를 포함한 IPEndPoint 객체를 인자로 사용해야 함.

 

IPEndPoint객체의 2가지 생성자

public IPEndPoint(long address, int port);

public IPEndPoint(IPAddress address, int port); (가장 자주 사용함)

저작자 표시 비영리 변경 금지
Posted by -세티-
2008/11/30 23:54

HttpWebRequest - 웹 화면 가져오기 General .NET2008/11/30 23:54


using System;
using System.Text;
using System.Data;
using System.Net;
using System.IO;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

//클래스를 생성하빈다.
public partial class XXXX_PrintData
{
    // 페이지 로드 이벤트에서 ViewWebPage함수를 호출한다.
    protected void Page_Load(object sender, EventArgs e)
    {
        ViewWebPage();
    }

    //HttpWebRequest, HttpWebResponse, StreamReader 객체를 생성.
    public void ViewWebPage()
    {
        HttpWebRequest objWebRequest = null;
        HttpWebResponse objWebResponse = null;
        StreamReader objStreamReader = null;

        NetworkCredential networkCred = new NetworkCredential("", "");
        CredentialCache networkCache = new CredentialCache();

        string strUrl = "";

        objWebRequest = (HttpWebRequest)WebRequest.Create(strUrl);
        networkCache.Add(new Uri(strUrl), "Basic", networkCred);
        objWebRequest.Credentials = networkCred;
        objWebResponse = (HttpWebResponse)objWebRequest.GetResponse();
        objStreamReader = new StreamReader(objWebResponse.GetResponseStream(), Encoding.GetEncoding(949));

        string strLine = string.Empty;
        string strBody = string.Empty;
        while (objStreamReader.Peek() != -1)
        {
            strLine = objStreamReader.ReadLine();
            this.viewPrintTable.InnerHtml += strLine + "\r\n";
        }
    }

    private string Chr(int p)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    private void StreamReader(Stream stream, object p)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

저작자 표시 비영리 변경 금지
Posted by -세티-

이번에는 두 개의 다른 값 중에서 하나를 선택하는 것에 대해 알아본다.

대표적인 문법은 If.....then 이라는 것이 있다.

 

우리가 프로그램을 만들다보면 둘 중에 하나를 선택해야 하는 경우가 있다.

 

예를 들어...

회원 가입시 가입자가 남자라면 남자를 선택해야 하고 여자라면 여자를 선택해야 하는데...

이 선택된 값이 무엇이냐에 따라 결과를 보여주고 데이타베이스에 저장해야 한다.

이런 상황에서 가장 유용하게 많이 쓰는 것이 If.....then 이다.

 

그것의 예제를 만들어 보도록 하겠다.

먼저 하나의 텍스트 박스 컨트롤을 폼에 드래그 하고 버튼을 만든다.

그것의 디자인은 아래의 그림과 같다.



 

다음에는 버튼을 더블 클릭하여 코드 비하인드 페이지로 이동한다.

텍스트 박스 컨트롤의 ID는 Textbox1 이다. (변경하지 않았다면...)

텍스트 박스 내부의 값을 변수에 할당하기 위해 다음과 같이 코딩을 한다.

 

Dim strTxt As String

strTxt = TextBox1.Text

 

이제 기본 준비가 되었다.

우리가 출력할려고 하는 것은 텍스트 박스안에 "남자" 라는 글자를 입력하면 메시지 팝업이 "남자라고 글을 남겼습니다." 라는 메시지를 출력할 것이고, 이와는 다르게 "여자" 라는 글을 남긴다면 "여자라는 글을 남겼습니다." 라는 메시지를 출력할려고 하는 것이다.

 

두 가지의 선택 입력에 따라 메시지 결과를 다르게 보여주는 것이 목적인데 이런 상황에서 If...Then은 유용하게 쓰인다.

 

다음과 같이 코딩을 한다.

 

If strTxt = "남자" Then
   MsgBox("남자라고 글을 남겼습니다.")
Else
    MsgBox("여자라고 글을 남겼습니다.")
End If

 

이제 F5키를 이용하여 폼을 읽어본다.

그리고 텍스트 박스에 값을 입력해 본다.

 



 

이제 확인을 클릭하고 다시 여자라는 글을 입력해 본다.

아래의 결과가 그것이다.

 



 

 

이 예제를 통해 If....then 이 무엇인지를 살펴보았다.

그런데 왠지 뭔가를 덜 닦은 기분이 드는 관계로 약간 더 완벽을 기하기 위해 If..... then 에 조건을 조금 더 추가해 보고자 한다. ^^;

 

위에서 제시한 코드를 말로 풀어보면...

텍스트 박스에 입력된 데이터를 strTxt라는 변수에 할당한다.

만약에 strTxt라는 string 데이타 타입의 변수 값 "남자"가 텍스트 박스에서 입력된 글자인 "남자" 와 같으면 "남자라고 글을 남겼습니다." 라는 메시지를 출력하고 그 외의 것은 무조건 "여자가 글을 남겼습니다." 라는 조건이다.

 

즉... 저 텍스트 박스에 "남자" 라는 이외의 단어를 입력하면 무조건 메시지 박스는 "여자라고 글을 남겼습니다." 라고 출력하게 되어 있다. 이래서 컴퓨터는 바보다....^^;

 



따라서 조건을 약간 수정하여....

텍스트 박스에 입력된 문자가 남자 또는 여자가 아닌 다른 그 외의 것이라면 정상적으로 입력하라는 메시지를 출력할 계획이다.

그 메시지는 이렇게 될 것이다.

 

"남자 또는 여자 라는 단어 외에는 입력할 수 없습니다."

 

이제 조건을 수정하도록 하겠다.

 

If strTxt = "남자" Then
   MsgBox("남자라고 글을 남겼습니다.")
ElseIf strTxt = "여자" Then
   MsgBox("여자라고 글을 남겼습니다.")
Else
   MsgBox("남자 또는 여자라는 단어 외에는 입력할 수 없습니다.")
End If

 

이 조건을 사람의 언어로 설명하면....

입력 값이 남자라면 메시지를 출력한다.

남자라는 입력 값외의 값 중에 여자라는 입력 값이 있으면 메시지를 출력한다.

이 두 가지 이외의 것은 모두 다른 메시지를 출력한다.

가 된다.

 

이제 이것의 결과를 실행해 보자.

다시 중성이라는 단어를 입력하고 결과를 보면 아래의 그림과 같다.

 



 

이상으로 If....then 에 대해 살펴보았다.

저작자 표시 비영리 변경 금지
Posted by -세티-

앞에서는 두 개의 값을 조합하여 계산하는 것을 해봤다.

이번에는 두 개의 값을 비교하는 연산자에 대해 알아본다.

비교 연산자라고도 하는데 이 비교 연산자에는 아래의 것들이 존재한다.

 

= (equal) , <>(not equal to), >(grater than), <(less than),

>=(greater than or equal to), <=(less than or equal to)

 

equal은 두 개의 값 A, B를 기준으로 하는데... 두 개의 값이 다르다면 false, 같으면 true 라는 Boolean 값을 return 한다.

 

not equal to는 역시 A, B값이 서로 다르면 true를 return 하지만 A와 B가 같으면 false를 return한다.

 

grater than은 A가 B보다 크다고 가정했을 때 A > B가 되면 true를 return 하지만 반대로 A < B라면 false를 return 한다.

 

less than은 A가 B보다 작다고 가정할 때 A > B가 되면 false를 return 하고 A < B 일 경우엔 true를 return 한다.

 

greater than or equal to 의 경우 A값이 B보다 크거나 같다고 가정할 때, A >= B 가 되면 true를 return 하지만 B >= A일 경우에는 false를 return 한다.

 

마지막으로 less than or equal to은 B가 A보다 크거나 같은 경우, A <= B라면 true를 return 하지만 그 반대의 경우인 A >= B가 된다면 false를 return 한다.

 

이것의 예제 코드는 다음과 같다.

 

Dim A As Double = CDbl(Textbox1.Text)
Dim B As Double = CDbl(Textbox2.Text)

MsgBox(A > B)
MsgBox(A < B)
MsgBox(A = B)

참고로 Textbox1.Text 라는 부분을 CDbl()이라는 메서드안에 할당한 이유는 그것의 최초 입력이 Text 형식의 데이타 타입이기 때문이다.

 

앞에서 설명했듯이 각각의 변수는 그에 맞는 값만 받아들 일 수 있다.

우리가 계산을 적용하기 위해서는 값이 숫자이어야 하고 또 그것을 할당받는 변수 또한 마찬가지로 숫자 타입이어야 한다.

Double이라는 데이타 타입은 소수점을 포함한 숫자의 형태를 받아들 일 수있다.

그래서 변수의 타입을 Double로 한 것이다.

그러나 윈도우 폼에서 키보드를 통해 입력하게 될 숫자는 컴퓨터 입장에서는 Text에 불과하다.

따라서 Text 형태의 입력받은 값을 데이타 타입을 숫자로 변경해야 하고, 그러기 위햐서는 컴퓨터와 약속된 룰인 CDbl()를 사용하여 그것을 변수가 할당받을 수 있는 숫자의 형태로 변경하는 것이다.

저작자 표시 비영리 변경 금지
Posted by -세티-

1 + 2의 값은 3이다.

이것을 코드로 표현하면

 

Dim plusValue As Integer = 1 + 2 가 된다.

 

더하기 와 같은 정수 연산자로는 빼기( - ), 곱하기( * ), 나누기( / )가 존재한다.

 

+ : addtion

- : substraction

* : multipication

/ : division

 

같은 실습예제를 통해 정수연산의 결과를 확인하고자 한다.

 



 

이번에는 두 개의 값을 입력받아 정수를 계산하는 윈도우 폼을 만들어 보는 것을 한다.

먼저 아래의 그림처럼 2개의 라벨과 2개의 텍스트 박스 그리고 하나의 버튼을 폼에 드래그 한다.


 

다음으로 버튼 부분을 마우스로 더블 클릭한다.

Button1_Click 메서드 영역에 아래의 코드를 입력한다.

아래는 그것의 코드 이다.

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

        Dim intTxtBox1 As Integer
        intTxtBox1 = TextBox1.Text

 

        Dim intTxtBox2 As Integer
        intTxtBox2 = TextBox2.Text

 

        Dim addtion As Integer = intTxtBox1 + intTxtBox2
        Dim substraction As Integer = intTxtBox1 - intTxtBox2
        Dim multipication As Integer = intTxtBox1 * intTxtBox2
        Dim division As Integer = intTxtBox1 / intTxtBox2

 

        MsgBox("덧셈값: " & addtion & ", 뺄셈값: " & substraction & ", 곱셈값 : " & multipication & ", 나눗셈 : " & division)

 

    End Sub

 

 

F5키를 눌러서 결과를 확인해 본다.

첫번째 값과 두번째 값에 각각 4+2를 입력해 보겠다.

 

그것의 결과는 아래와 같다.


저작자 표시 비영리 변경 금지
Posted by -세티-
2008/11/30 00:18

세티가 정리한 VB.NET(3) General .NET2008/11/30 00:18


이번에는 변수의 그룹들을 저장하기 위해 변수를 어떻게 사용하는가에 대해 알아보고자 한다.
변수는 프로그램에서 각기 다른 데이타 타입을 저장하기 위해 사용된다.
변수는 하나의 값을 기준으로 저장한다. 우리가 1 부터 10까지의 값을 저장하기를 원한다면 아래와 같은 방식으로 코딩을 해야 한다.

Dim a1 As Integer
Dim a2 As Integer
Dim a3 As Integer
Dim a4 As Integer
Dim a5 As Integer
Dim a6 As Integer
Dim a7 As Integer
Dim a8 As Integer
Dim a9 As Integer
Dim a10 As Integer

a1 = 1
a2 = 2
a3 = 3
a4 = 4
a5 = 5
a6 = 6
a7 = 7
a8 = 8
a9 = 9
a10 = 10

매우 노가다 스럽다. 그나마 10개 니깐 저런식으로 코딩이 가능하지만 만약 100개라면??
또한 값이 굉장히 복잡한 로직의 결과라면?
이렇게 반복되는 여러 개의 같은 타입의 값을 변수에 저장하는 알맞은 방법이 있다.

그것은 바로 array라고 불리는 배열을 사용하는 방법이다.
배열을 만드는 방법은 아주 간단하다.

아래의 코드를 살펴보자.

Dim intArray() As Integer

먼저 변수이름의 뒤에 괄호를 넣는다.
여기에 많은 값을 저장하기를 원한다면 괄호안에 그 크기 만큼 숫자를 넣어주면 된다.
위의 예제에서는 10개를 저장했으므로 이것을 배열에 적용하면 코드는 아래와 같다.

Dim intArray(10) As Integer

여기에 값을 할당해 보도록 하겠다.

intArray(0) = 1
intArray(1) = 2
intArray(2) = 3
intArray(3) = 4
intArray(4) = 5
intArray(5) = 6
intArray(6) = 7
intArray(7) = 8
intArray(8) = 9
intArray(9) = 10

위의 코드 보다 훨씬 짧아졌다. 변수의 선언도 단 한줄이면 말끔하게 해결된다.
저 괄호안에 있는 숫자를 element 라고 칭한다.
정리를 하자면 하나의 변수를 선언하고 그 뒤에 ()를 넣은 다음 괄호안에 element를 넣어주면 되는 것이다.
만약 저렇게 나열해서 코딩을 하기 귀찮다면 아래의 예제와 같은 방법으로도 가능하다.

Dim intArray() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

위의 코드 처럼 코딩을 하게 되면 변수의 size를 넣어주지 않아도 앞에서 부터 차례대로 값이 intArray 변수에 할당되게 된다.그래서 굳이 size를 적어주지 않아도 된다.
array 변수를 이용한 직접 코딩을 해보도록 하겠다.

먼저 첫번째 예제를 코딩한 결과이다.




결과를 출력하기 위해 모두 MsgBox를 10개 만들었다. 이건 너무 노가다 임에 틀림없다.
이번에는 두 번째 코드를 가지고 결과를 확인해 보겠다. 


Cint()
라는 부분에 숫자를 배열의 숫자를 할당하면 할당된 값이 출력된다.
참고로 배열은 0부터 시작한다. 그래서 1이라는 값이 출력되는 것이다. 

for 문을 이용하여 출력하는 예제는 각자 해보길 바란다.

저작자 표시 비영리 변경 금지
Posted by -세티-
2008/11/30 00:15

세티가 정리한 VB.NET(2) General .NET2008/11/30 00:15

이번에는 단어와 텍스트를 가지고 어떻게 String Data Type을 사용하는지 알아보고자 한다.

문자열(String)이란 무엇인가?
하나의 스트링은 하나의 글자 또는 숫자 그리고 빈 공간과 같은 것들의 조합이다.
스트링 변수에 문자를 할당해 보도록 한다.

Dim strStringA As String = "스트링 문자열" 

문자를 String 변수에 할당 하고자 할 때는 할당할 문자를 quotation mark("")안에 문자를 넣어야 한다. 이렇게 문자가 할당된 변수를 또 다른 변수를 이용하여 할당할 수 있다.

Dim strStringB As String = ""
strStringB = strStringA

위의 코드를 살펴보면 먼저 새로운 스트링 변수 strStringB를 선언하고, 아무런 문자도 없는 빈 공간의 ""를 할당한다. 그럼 strStringB는 빈 공간을 가지게 되고 이것에 변수 strStringA를 할당하면 strStringA라는 변수가 가진 "스트링 문자열" 이라는 값을 strStringB가 가지게 된다.

또한 ampersand(&)를 이용하여 문자를 만들 수 있다.
먼저 두 개의 변수를 선언해야 하는데 a, b 라는 이름으로 만들도록 하겠다.

Dim a As String
Dim b As String

이라고 선언한다.

그리고 Dim a As String = "Hello " 라는 문자열을 할당한다.
또한 Dim b As String = "World" 라는 문자열을 할당한다.
이 전의 강의에서 값을 가지는 변수는 변수에 할당될 수 있으며 그것은 값 처럼 된다고 말했다.

이 두개를 할당 받을 새로운 변수 c를 선언한다.

Dim c As String

이제 문자열 값을 가지는 두 개의 변수를 새로 선언한 변수 c에 할당한다.

c = a & b
이것의 결과는 다음과 같다.

"Hello World"

Web Form을 이용하여 직접 코딩해 보도록 하겠다.
먼저 비주얼 스튜디오를 열고 Form을 하나 생성한다.
다음에 마우스로 더블 클릭하고 Code View로 이동한다.
Form1_Load라는 영역에 위의 예제를 붙여 넣는다. 

Public Class Form1 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim a As String = "Hello"
Dim b As String = " World"
Dim c As String = ""
c = a & b
MsgBox(c) 
End Sub
End Class

이것을 build하면 아래의 그림과 같은 결과가 리턴된다.


텍스트가 메시지 박스안에 출력된 모습을 볼 수 있을 것이다.

저작자 표시 비영리 변경 금지

'General .NET' 카테고리의 다른 글

세티가 정리한 VB.NET(4) - 변수와 연산자  (0) 2008/11/30
세티가 정리한 VB.NET(3)  (0) 2008/11/30
세티가 정리한 VB.NET(2)  (0) 2008/11/30
세티가 정리한 VB.NET(1)  (2) 2008/11/30
익명 메서드(Anonymous Methods)  (0) 2008/11/30
Nullable 타입  (0) 2008/11/30
Posted by -세티-
2008/11/30 00:09

세티가 정리한 VB.NET(1) General .NET2008/11/30 00:09

작성일 : 2006년 1월 20일
옮긴일 : 2008년 12월 22일

변수는 프로그래밍 언어에서 중요한 컨셉입니다.
변수는 하나의 값을 저장하는 이름입니다.

컴퓨터 프로그램을 생성할 때 숫자라던가 단어, 사람의 이름과 같은 것을 저장하기 위해 변수를 사용할 수 있다.
그럼 정보를 전달하는데 왜 변수를 사용하는가? 직접 그 값을 사용하면 되는것을?
변수는 하나의 값이 될 수도 있다.
변수를 사용하면 다음과 같은 것들이 가능하다.

[변수]=[값]

제리 = 제리의 갯수 (예 : jelly = 6)
캔디 = 캔디의 갯수 (예 : candy = 5)

따라서 책상은 총 11개의 무언가를 가지게 된다. 제리와 캔디는 각각의 자신의 갯수를 가지고 있다.
책상 = 제리 + 캔디 

이 때... 나는 캔디의 갯수를 변경하기를 원한다. 따라서 candy의 갯수를 6으로 변경했다.
책상은 총 12개의 무언가를 가지게 되지만 책상 = 제리 + 캔디 라는 로직이 변하지는 않는다.
제리와 캔디는 변수로서 값을 가지고 있기 때문이다.
이런 편리함이 변수를 사용해야만 하는 하나의 예 가 되는 것이다.

하나의 변수를 사용하기 위한 3가지 스텝이 있다.

1. 변수선언
2. 변수할당
3. 변수사용

1번의 것은 내가 사용하고자 하는 변수의 타입을 컴퓨터에게 알리는 절차를 말한다.
2번의 것은 하나의 값을 고정시키기 위해 변수에게 주는 것이다.
3번의 것은 변수에 할당된 값을 되찾아 오는 것을 말한다. 

1. 변수선언

하나의 변수를 사용하고자 할 때 어떤 Data Type을 사용할 것인가를 결정하고 있어야 한다.
Dim과 Askeywords를 사용하는 하나의 변수를 선언한다.

 Dim aNumber As Integer

 위의 코드를 해석하자면

"컴퓨터야!! 나는 aNumber라는 변수를 사용하고 싶단다. 그 변수에는 숫자들을 저장하고 싶단다."

 위의 aNumber라는 변수에는 단지 숫자만 저장할 수 있다.
왜냐면 숫자만 담겠다고 지정했기 때문이다. 그것은 Integer라는 부분에 의해서 그렇게 된 것이다.
만약에 하나의 단어를 입력하고 싶다면??? 그것은 String 이라는 이름으로 불리는 Data Type을 지정해 주면 된다.

 Dim aWord As String

위의 코드를 사람의 언어로 표현하면 다음과 같다.

"컴퓨터야...~ 나는 aWord라는 변수에 String을 담고 싶단다..^^ "

 만약 42.5 와 같은 소수점이 붙은 숫자를 담고 싶다면...?? 그냥 Integer에 담는다..??
그건 안된다.
왜냐면...사람들은 그냥 저것을 숫자라고 하면 알아듣지만 컴퓨터는 바보다.

따라서 저게 숫자는 숫자인데 '그냥 숫자가 아닌 소수점이 붙은 숫자다.' 라고 알려줘야 된다는 것이다. 따라서 컴퓨터에게 '이건 소수점으로 된 숫자야..' 하고 말해주는 표현은 아래와 같다.

Dim aDouble As Double

또 다른 표현이 있다.
우리는 친구들과 가끔 이야기를 하다보면 예/아니오 로만 답하시오... 라는 말들을 가끔 듣게 된다.
그것은 자질구해한 이야기를 듣기 귀찮을 때 주고 하게 되는데...
컴퓨터에게도 그런 방식으로 이야기를 할 수 있다.

예/아니오는
컴퓨터에서 True/False 라고 표현한다. 조금더 세련된 말로는 참/거짓 이 되는 것이다.
이런 것을 표현하기 위해 변수에 값을 담아야 하는데, 이런 값을 담고 있는 변수의 데이타 타입을 Boolean 이라고 한다.
이것을 사용하겠다고 컴퓨터에게 말해줘야 하는데 아래와 같은 표현법을 사용한다.

Dim YesorNot As Boolean

이것을 다시한번 친숙한 사람의 언어로 표현하면...

"컴퓨터야..~~ 나는 예/아니오 라는 값을 담고 싶어. 나에게 변수라는 그릇을 다오~!! 그것의 데이타 타입은 Boolean 이란다."
가 되는 것이다.

이런 변수에 대해 그리고 데이타 타입에 대해 보다 자세한 것을 보고 싶다면 아래의 주소로 가보면 된다.

http://msdn.microsoft.com/vbasic/learning/newtodevelopment/variables/datatypes/


2. 변수할당

위에서 변수를 선언했으니 이 변수에 무언가를 담아야 하겠다.
변수라는 밥 그릇을 달라고 했으니 밥이라도 담아야 하는데 어떻게 담는가???
그것은 바로 = 을 사용해서 담게 된다.
이것은 보다 세련된 언어로 표현하면 "할당" 이라고도 한다.

그럼 위 에서 선언한 변수들 중의 하나에 값을 담아보자.

Dim aWord As String = "Hello"

 이것을 마찬가지로 친숙한 사람의 언어로 표현하면...
"aWord라는 String이라는 데이타 타입 변수에 Hello라는 단어를 할당한다." 가 된다.

3. 변수의 사용

비주얼 스튜디오가 있다면 Form1_Load라는 곳에다가 다음의 코드를 넣는다.

Dim
anInteger As Integer = 100
Dim aSingle As Single = 3.141592
Dim aString As String = "Hello"
Dim aBoolean As Boolean =
True

그리고 다음의 코드를 이용하여 결과를 확인해 본다.

MsgBox(anInteger)
MsgBox(aSingle)
MsgBox(aString)
MsgBox(aBoolean)

MsgBox()
라는 녀석은 메시지 박스를 띄우도록 컴퓨터 내부에 이미 코딩되어져 있다.
저 () 안에 값을 할당한 변수를 넣으면 MsgBox()는 변수가 가지는 값을 출력해 주게 되는 것이다.
MsgBox()라는 것을 흔히 메소드 라고도 이야기 하는데 아무튼... 메시지 박스를 띄우기 위해 컴퓨터와의 약속이라고 생각하면 쉽다.

자동차의 방향을 바꾸기 위해선 핸들이 필요하다.
핸들이라는 이름은 방향을 바꾸기 위한 나와 자동차와의 약속이다.
마찬가지고 내가 메시지 박스를 띄우기를 원한다면 MsgBox()라는 약속된 녀석을 이용하면 되는 것이다. 아무 부담 없이 말이다.^^

저작자 표시 비영리 변경 금지

'General .NET' 카테고리의 다른 글

세티가 정리한 VB.NET(3)  (0) 2008/11/30
세티가 정리한 VB.NET(2)  (0) 2008/11/30
세티가 정리한 VB.NET(1)  (2) 2008/11/30
익명 메서드(Anonymous Methods)  (0) 2008/11/30
Nullable 타입  (0) 2008/11/30
DataTable.NewRow  (0) 2008/11/30
Posted by -세티-
2008/11/30 00:06

익명 메서드(Anonymous Methods) General .NET2008/11/30 00:06


익명 메서드(Anonymous Methods)

- 메서드를 통해 처리하는 내용을 인라인의 형태로 처리하는 방법을 제공
- delegate를 통해 메서드를 호출하는 경우 호출할 수 있는 메서드의 타입을 델리게이트를 생성하면서 선언하고, 이벤트가 발행하였을 경우에 델리게이트를 통해 선언된 메서드를 호출, 작업처리 

using System;
using System.Collections.Generic;
using System.Text; 

namespace SimpleDelegateSample
{

    delegate int AnyDelegate();

    class Program
    {
        public static void AnyMethod(AnyDelegate ad)
        {
            Console.WriteLine(ad());
        }

        static void Main(string[] args)
        {
            int x = 10;
            int y = 20;
            AnyDelegate ad = delegate{ return x * y; };
            AnyMethod(ad);
        }
    }
}

 

코드 설명

1. Main()를 실행

2. int 타입의 x, y변수에 각각 10과 20이라는 값을 할당.

3. ad라는 변수를 선언하고 데이터 타입을 AnyDelegate(사용할 메서드의 타입)로 한다.

4. delegate를 사용하여 상단에 선언된 AnyDelegate()가 해야 할 일을 구현하고 ad에 할당한다.

5. AnyMethod()ad를 전달한다. 이 때 adAnyDelegate 타입이다.

6. 인자로 전달된 ad를 콘솔에서 실행하고 결과를 확인한다.

저작자 표시 비영리 변경 금지

'General .NET' 카테고리의 다른 글

세티가 정리한 VB.NET(2)  (0) 2008/11/30
세티가 정리한 VB.NET(1)  (2) 2008/11/30
익명 메서드(Anonymous Methods)  (0) 2008/11/30
Nullable 타입  (0) 2008/11/30
DataTable.NewRow  (0) 2008/11/30
닷넷2.0을 시작하며...  (0) 2008/07/22
Posted by -세티-
2008/11/30 00:04

Nullable 타입 General .NET2008/11/30 00:04


.NET Framework CTS(Common Type System)에 정의된 타입

- 값 타입(Value Type), 참조 타입(Reference Type)

- 이전에는 값 타입에 Null을 할당할 수 없었다.

- C#2.0에서는 값 타입에도 Null 저장이 가능해짐.(Nullable 타입)

- 컬럼의 타입이 정수형이므로 Null을 입력할 수 있도록 프로그램으로 처리.

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleCshapStudy
{
    class MakeNullable
    {
        static void Main(string[] args)
        {
            Nullable<int> x = new Nullable<int>(123);
            if (x.HasValue)
            {
                Console.WriteLine(x.Value);
            }
        }
    }
}

저작자 표시 비영리 변경 금지

'General .NET' 카테고리의 다른 글

세티가 정리한 VB.NET(1)  (2) 2008/11/30
익명 메서드(Anonymous Methods)  (0) 2008/11/30
Nullable 타입  (0) 2008/11/30
DataTable.NewRow  (0) 2008/11/30
닷넷2.0을 시작하며...  (0) 2008/07/22
세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
Posted by -세티-
2008/11/30 00:00

DataTable.NewRow General .NET2008/11/30 00:00

private void MakeDataTableAndDisplay()
{
    // Create new DataTable and DataSource objects.
    DataTable table = new DataTable();

    // Declare DataColumn and DataRow variables.
    DataColumn column;
    DataRow row; 
    DataView view;

    // Create new DataColumn, set DataType, ColumnName and add to DataTable.    
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    table.Columns.Add(column);
 
    // Create second column.
    column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "item";
    table.Columns.Add(column);
 
    // Create new DataRow objects and add to DataTable.    
    for(int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["item"] = "item " + i.ToString();
        table.Rows.Add(row);
    }
 
    // Create a DataView using the DataTable.
    view = new DataView(table);

    // Set a DataGrid control's DataSource to the DataView.
    dataGrid1.DataSource = view;
}

저작자 표시 비영리 변경 금지

'General .NET' 카테고리의 다른 글

익명 메서드(Anonymous Methods)  (0) 2008/11/30
Nullable 타입  (0) 2008/11/30
DataTable.NewRow  (0) 2008/11/30
닷넷2.0을 시작하며...  (0) 2008/07/22
세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
Posted by -세티-
2008/07/22 01:19

닷넷2.0을 시작하며... General .NET2008/07/22 01:19

최초 작성자 : 세티
최초 작성일 : 2004년 12월 24일
최종 작성자 : 세티
최종 작성일 : 2008년 07월 22일

2004년 12월 24일에 닷넷2.0을 처음 시작하면서 적은 글 입니다. 시간이 많이 흘러 내용을 약간 수정했습니다.
닷넷을 처음 시작하시는 분들에게 힘내시라는 의미에서 소개해 봅니다.~


1999년 12월, 난 그 때까지도 그 녀석에 대해 아는게 없었습니다. 대학을 졸업하고 처음으로 IT학원에서 만난 그 녀석은 상당히 어렵고 난해한 모습으로 나에게 다가왔습니다. 그 곳에서 나는 그 녀석을 이겨보겠노라 마음을 먹었고 녀석에게 덤볐습니다. 녀석과의 싸움에서 이기기 위해 수 많은 밤을 지새우고 수 많은 시간을 녀석과 함께 하다보니 어느새 많이 친해질 수 있었습니다. 그러나 녀석과 많은 시간을 보낼수록 그 녀석은 내게 늘 새로운 모습을 보여주었습니다.

학원 수강생 시절의 녀석은 그리 만만한 상대가 아니었습니다. 난 그 곳을 수료하게 되면서 그 녀석과 함께 사회에 첫 발을 디뎠습니다. 녀석의 이름은 ASP(Active Server Page 2.0) 이었습니다.

회사에서 많은 사이트와 웹 애플리케이션을 만들며 ASP와 함께 미지의 세계를 향해 나아가기 시작했습니다. ASP는 나와 함께 하면서 손에 잡힐 듯하면 달아나고 달아났다 싶어 힘들어 하면 어느새 내 곁에 와있는 것 이었다. 그것은 뫼비우스의 띠 처럼 언제나 끝이 없는 쫒고 쫒기는 그런 지루한 싸움이었던 것 같습니다. 그 녀석과 함께 지내는 시간이 많아졌을 때 그리고 그 녀석에 대해 이젠 나름 안다고 자부하게 되었을 때 난 녀석의 친구들을 만나게 되었습니다. 친구들 또한 녀석과 마찬가지로 나에게 많은 부담을 안겨주었습니다. 나의 기억에 의하면 녀석은 언제나 골치덩어리 였고, 녀석을 어려워 하는 만큼 나는 그 녀석과 함께 하는데 많은 시행착오를 거칠수 밖에 없었습니다. 한 때 별명이 에러맨(Error Man) 이었죠...^^; 녀석의 심술(Error)은 나를 힘들게 했지만 동시에 나는 그 만큼 강해질 수 있었습니다. 녀석과 동고동락 해온지 4년... 지금은 너무나 친한 사이가 되어 서로에 대해서 너무나 잘 알게 되었다. 그런 녀석이 얼마전 닷넷이라는 이름으로 새롭게 태어났습니다.

가상의 공간에서 나만의 창조물을 바라 볼 때면 그것이 하찮은 것이든 다른 이들이 부러워 할 만한 것의 것이든 가슴 한 구석에서 밀려오는 그 아련한 감동은 늦은 밤 도서관에서 나오는 상쾌함과 다를 바가 없었던 것 같습니다. 녀석은 나에게 얼마 전 처음으로 말을 걸었습니다. '지금 보다 나은 그리고 변화된 미래의 자신에 대해 느껴보지 않을래?' 라고...

언제나 그렇듯 무작정 서점으로 달려가 녀석에 대한 책을 한 권 샀습니다.
ASP.NET 1.0 그리고 VS.NET 을 준비했습니다. 녀석의 신상에 대해 간단하게 파악한 다음...

난 그 녀석을 만나러 갔습니다. 적을 알고 나를 알면 백전백승이라 하지만 난 그 녀석을 알기 위해 사전 준비 시간을 많이 투자할 수 없었습니다. 무조건 부딛혀 보자. 녀석으로 요즘 유행하는 블로그를 만들어 보겠노라고 마음을 먹은 6개월 후...

힘들기도 했고 보람을 느끼기도 한 그런 시간 있었습니다. 그것은 하나의 작은 수행과도 같았습니다. 녀석은 나를 힘들게 하면서 보람도 주고 그렇게 나를 조금씩 강하게 만들어 주었습니다. 그 녀석이 나를 힘들게 할수록 난 처음보다 더 빠른 속도로 녀석에 대해 알아갈수 있었습니다. 그리고 이제 녀석에 대해 어렴풋이 나마 알게 된 지금 난 나의 블로그에 녀석에 대해 쓸려고 합니다.

물론 녀석에 대해 아직 알아야 될 게 많지만 만남의 그 순간을 이 블로그에 남겨 첫 만남의 아련함을 기억하려고 합니다. 이 강좌의 이름은 [세티의 닷넷강좌]가 될 것입니다. 세상에 태어나 처음으로 쓰는 강좌인 셈이지요.
또한 닷넷을 접한지 얼마 되지 않았으므로 초보자를 대상으로 이해하기 쉽도록 그 내용을 적어나갈 것입니다.

이 글을 보는 사람이 닷넷 중급자라면 굳이 이 강좌를 보지 않아도 될 것입니다.^^;

- 세티 -

'General .NET' 카테고리의 다른 글

Nullable 타입  (0) 2008/11/30
DataTable.NewRow  (0) 2008/11/30
닷넷2.0을 시작하며...  (0) 2008/07/22
세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
Posted by -세티-

안녕하세요~ 세티 입니다.~~

[세티의 닷넷강좌]를 작성한 이후로 벌써 3년이라는 시간이 흘렀네요^^;

그 동안 신경쓰지 않고 방치해 두었었는데 아직 강좌를 찾는 분이 많아서 다시 작성할까 합니다.

이미지가 엑박으로 떠서 살려달라고 하는 분이 몇 분 있었는데요~

그게 엑박으로 뜨는 이유가 기존 강좌가 코리아인터넷닷컴에 있었던 제 강좌를 그냥 옮겨온 것이었고,

마침 얼마 전에 코리아인터넷닷컴이 서비스를 종료하게 되면서 이미지를 모두 볼 수 없게 되었습니다.

어찌해야 하나 하다가 많은 분들이 세티의 닷넷 강좌를 사랑해주셔서 다시 살리기로 했습니다.^^

기존 내용을 기반으로 Visual Studio 2008로 작성되는 강좌가 될 것이구요~
(Visual Web Developer와 큰 차이는 없을 것 입니다.)

재편집은 이제훈(Eloi) 님이 해 주실 것입니다.

새롭게 편집되는 세티의 닷넷강좌는 세티의 Lonely Star (http://www.setisigns.net)에 포스팅 될거구요...
이후 중단된 부분도 계속해서작성될 것 입니다.

많은 성원 부탁드리구요~ 강좌 보시면서 궁금한 점은 댓글로 남겨주시면 충분히 답변 드리도록 하겠습니다.

즐거운 하루 되세요~


- 블로거 세티 올림 -

'General .NET' 카테고리의 다른 글

DataTable.NewRow  (0) 2008/11/30
닷넷2.0을 시작하며...  (0) 2008/07/22
세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
Posted by -세티-
2008/04/27 00:38

닷넷 전용 어셈블리 General .NET2008/04/27 00:38

2006년 10월 31일자 글이고, 기존의 네이버 블로그를 폐쇄하고, 가져온 글입니다.

 

l         어셈블리 전용(Private) 또는 공유(Shared) 형태로 배포됨.

l         전용과 공유의 차이점 명명 규칙과 버전관리 정책

 

l         전용 어셈블리의 특징

n         배포된 응용 프로그램에 의해서만 이용될 수 있는 모듈들의 집합.

n         해당 형식들을 소유하는응용 프로그램만이 이 형식들을 사용할 수 있고 시스템의 다른 응용 프로그램과 공유하지 않게 한다는 것을 의미.

n         클라이언트 응용 프로그램과 동일한 디렉토리(응용 프로그램 디렉토리)나 그 하위 디렉토리에 있어야 함.

n         전용 어셈블리의 resolution과 로딩은 어셈블리가 위치한 응용 프로그램 디렉토리(bin 디렉토리)에서 일어난다. 옮겨도 실행됨.

n         삭제를 하여도 머신의 다른 응용 프로그램에는 손상을 주지 않음.

 

l         전용 어셈블리 프로빙(기초)

n         프로빙 외부 어셈블리 참조자를 정확히 상응하는 바이너리 파일에 매핑하는 과정

n         프로빙이란?

u        닷넷 런타임이 어떤 모듈의 매니페스트로부터 .assembly extern CarLibrary 라는 라인을 읽게 되면 CarLibrary.dll이라는 이름의 파일을 검색한다. 이 때 이 파일을 검색할 수 없게 된다면 *.exe 버전을 검색하게 된다. 이 두 파일이 모두 검색되지 않으면 런타임 예외를 발생시킨다. 그러나 XML 구성 파일(*.config)을 이용하게 되면 런타임이 응용 프로그램 디렉토리 밖의 다른 위치에 에서 프로브하게 할 수 있다.

 

l         전용 어셈블리 식별하기

n         전용 어셈블리 식별자 문자열 이름과 숫자 버전으로 구성.

n         문자열 이름 어셈블리의 매니페스트를 포함하는 바이너리 모듈의 이름에 기초해서 만들어진다.

Ex) CarLibrary.dll 어셈블리의 매니페스트

.assembly CarLibrary

{

….

.ver 1:0:454:30104 ß--- 버전 번호는 다를 수 있다.

}

어셈블리의 버전 정책은 닷넷 런타임이 어셈블리를 로딩할 때 적용하려 하지 않을 것이다. 그 이유는 이 전용 어셈블리를 알고 있는 것은 바로 해당 클라이언트 응용 프로그램밖에 없기 때문이다. 그렇기 때문에 전용 어셈블리에 대해서는 정확한 버전 검사를 할 필요가 없는 것이다.

 

 

Reference

1. Part3 .NET 어셈블리를 이용한 프로그래밍, 9장 .NET 어셈블리, C# and the .NET Platform, p.440~442

'General .NET' 카테고리의 다른 글

닷넷2.0을 시작하며...  (0) 2008/07/22
세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
Posted by -세티-
2008/04/27 00:37

델리게이트(1) General .NET2008/04/27 00:37

2006년 10월 27일 작성된 글이며, 네이버 블로그를 폐쇄하고, 가져온 글 입니다.

1. 닷넷 델리게이트

-         응용 프로그램 내에 있는 다른 메소드를 가리키는 객체

1.1 델리게이트가 포함하는 3가지 중요한 정보

-         델리게이트가 호출하는 메소드 이름

-         이 메소드의 인수

-         이 메소드의 반환값

1. 2 닷넷 프레임워크에서는 동기 델리게이트와 비동기 델리게이트를 이용하는 것이 가능.

 

2. C#에서 델리게이트 정의하기

-         delegate 키워드를 사용.

-         내부적으로 System.MulticastDelegate로부터 파생되는 봉인 클래스가 생성됨.

Ex) public delegate void PlayAcidHouse(Person theDJ, int volumn);

sealed class PlayAcidHouse : System.MulticastDelegate

{

         public PlayAcidHouse(object target, unit functionAddress)

         public void Invoke(Person theDJ, int volumn)
         public IAsyncResult BeginInvoke(Person theDJ, int volumn, AsynCallback cb, object state)
         public void EndInvoke(IAsyncResult result)

}

 

-         PalyAcidHouse 클래스에는 자동적으로 3개의 public 메소드가 만들어짐.

-         Invoke() : 델리게이트에게 현재 지시하고 있는 메소드를 호출할 때를 알리기 위해서 호출, C#에서 직접 호출 불가능

-         BeginInvoke(), EndInvoke() 는 비동기 호출하는데 이용

'General .NET' 카테고리의 다른 글

세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
Posted by -세티-
2008/04/27 00:35

C# 전처리기 지시문 General .NET2008/04/27 00:35

2006년 8월 13일자에 작성된 글이며, 기존 네이버 블로그를 폐쇄하기 위해 가져온 글 입니다.

최초 작성자 세티
최초 작성일 2006년 8월 13일 일요일
최종 수정일
최종 수정자
C# '전처리기' 지시문

정의 : 컴파일 과정을 제어하기 위해서 사용됨.

C# 전처리기 지시문
#define, #undef - 조건부 컴파일 기호를 정의하거나 정의를 해제 하는데 이용.
#if, #elif, #else, #endif - 소스 코드의 일부를 조건적으로 건터뛰는데 이용.
#line - 에러와 경고의 줄 번호를 제어하는데 이용.
#error, #warning - 해당 빌드에 대한 에러와 경고 생성하는 데 이용.
#region, #endregion - 소스 코드의 일부를 명시적으로 표시하는데 이용.
- 표시된 영역 안의 코드는 확장, 축소 될 수 있다.


#region, #endregion 를 이용하여 코드 영역 지정하기
#region 전처리기를 이용한 코드 영역 지정하기
public class Class1
{
   //내용
}
public interface Interface1
{
   //내용
}
#endregion

조건부 코드 컴파일하기
- #if, #elseif, #else, #endif 를 사용하여 코드 블록을 조건적으로 컴파일 하게 한다.
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            #if(DEBUG)
            #warning 경고! Debug가 정의되어 있음. 릴리즈 빌드로 구성하시오.
            Console.WriteLine("App directory:{0}", Environment.CurrentDirectory);
            Console.WriteLine("Box: {0}", Environment.MachineName);
            Console.WriteLine("OS: {0}", Environment.OSVersion);
            Console.WriteLine(".NET Version: {0}", Environment.Version); Console.ReadLine(); #endif
        }
    }
}

'General .NET' 카테고리의 다른 글

닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Posted by -세티-
2008/04/27 00:34

기초 C# - 제너릭 General .NET2008/04/27 00:34

2006년 8월 12일에 작성된 글이며, 기존의 네이버 블로그를 폐쇄하고, 옮겨온 글입니다.

MSDN - Generic 소개

1. 제너릭 클래스와 메서드가 있다.
2. 제너릭 형식에서만 가능.
3. 재사용성, 형식 안정성, 효율성 달성이 가능.
4. 컬렉션과 컬렉션을 다루는 메서드에서 일반적으로 사용.
5. System.Collections.Generic 네임스페이스에 제너릭 기반 컬렉션 클래스가 존재.

using System;
using System.Collections.Generic;
using System.Text;

namespace VS2005
{
 //T형식 파라미터
 public class GenericClassTest<T>
 {
  //중첩된 Node 클래스도 T 제너릭
  public class Node
  {
   //T as private member data type
   private T data;
   public T Data
   {
    get { return data; }
    set { data = value; }
   }

   private Node head;
   public Node next;
   public Node Next
   {
    get { return next; }
    set { next = value; }
   }

   //중첩 Node 클래스의 생성자
   //생성자가 T를 받아서 타입을 결정
   public Node(T t)
   {
    next = null;
    Data = t;
   }
  }

  public GenericClassTest()
  {
   head = null;
  }

  public void AddHead(T t)
  {
   Node n = new Node(t);
   n.next = head;
   head = n;
  }
  public IEnumerator<T> GetEnumerator()
  {
   Node current = head;
   while(current != null)
   {
    yield return current.Data;
    current = current.Next;
   }
  }
 
 }

 public class GenericTest
 {
  public static void Main()
  {
   GenericClassTest<int> list = new GenericClassTest<int>();
   for (int i = 0; i < 10; i++ )
   {
    list.AddHead(i);
   }

   foreach (int i in list)
   {
    System.Console.Write(i + "");
   }
   System.Console.WriteLine("\nDone");
  }
 }
}

'General .NET' 카테고리의 다른 글

델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
TAG c#, 제너릭
Posted by -세티-
2008/04/11 01:33

닷넷의 소켓 클래스 General .NET2008/04/11 01:33

필요한 네임스페이스

System.Net, System.Net.Sockets

 

System.Net.Sockets.Socket 클래스의 특징

- 클라이언트 응용프로그램과 서버 응용 프로그램에서도 소켓으로 사용 가능

- 동기, 비동기 동작을 모두 사용가능

 

endpoint

- 네트워크 케이블의 양 끝(종단점)

- 네트워크에 대한 읽기, 쓰기를 수행

 

클라이언트와 서버 응용 프로그램은 소켓 연결을 통해서 통신하고 바이트 스트림을 주고 받는다. 다른 소켓으로 메시지를 보내기 위해서는 응용 플로그램을 제공하는 PC의 아이피 주소와 소프트웨어의 프로세스 식별자를 알아야 한다.

PC에서 소프트웨어 프로세스 식별자는 포트라고 하는 고유한 숫자를 사용.

따라서 응용 프로그램에서 연결의 반대편 끝에 있는 다른 소켓에 메시지를 전달하려면 상대편 IP주소와 응용 프로그램의 포트 번호를 알아야 한다.

 

닷넷 프레임워크에서는 소켓의 기능을 System.Net.Sockets.Socket 클래스로 제공.

인터넷을 사용하는 소켓 응용 프로그램을 작성하므로 AddressFamily.InterNetwork를 사용한다.

 

[소캣구성]

소켓 객체를 생성하고 사용하기 위한 Socket 클래스의 생성자

public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)

 

소켓 객체의 생성자는 3가지 열거형 AddressFamily, SocketType, ProtocolType을 인자로 받으며 각 열거형은 System.Net.Sockets 네임스페이스에 정의되어 있다.

 

AddressFamily 열거형

- Socket 객체가 주소를 풀이하기 위해 사용하는 주소 지정 스키마를 정의.

- 여기서는 인터넷을 사용하므로 AddressFamily.InterNetWork를 사용.

 

SocketType 열거형

- 소켓의 종류를 지정, 가장 많이 사용되는 소켓의 종류는 SocketType.Stream

- Stream은 양방향 연결 기반 바이트 스트림을 제공.

 

ProtocolType 열거형

- 소켓이 통신을 하기 위해 사용하는 저수준 프로토콜의 종류를 지정.

- TCP, AddresssFamily.InterNetwork를 사용해야 함.

 

) 소켓객체의 인스턴스를 생성

Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

 

[원격서버에 연결하기]

Socket클래스의 Connect()를 사용하여 원격서버에 연결.(동기적 시도)

Connect() 메소드의 서명

- public void Connect( EndPoint remoteEP);

 

Connect() 메소드 인자

- System.Net.EndPoint 클래스의 인스턴스

- EndPoint 클래스는 추상 클래스로 네트워크 주소를 의미한다

- EndPoint 클래스의 하위 클래스는 System.Net.IPEndPoint

- Connect() 메소드를 사용할 때는 연결하려는 원격 서버의 IP 주소와 포트 번호를 포함한 IPEndPoint 객체를 인자로 사용해야 함.

 

IPEndPoint객체의 2가지 생성자

public IPEndPoint(long address, int port);

public IPEndPoint(IPAddress address, int port); (가장 자주 사용함)

'General .NET' 카테고리의 다른 글

C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
Interface란?  (0) 2008/02/18
Posted by -세티-
2008/03/27 00:34

ASP.NET MVC Framework General .NET2008/03/27 00:34

원글 출처: http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx

지난 몇 년간 많은 사람들이 ASP.NET이 model-view-controller(MVC) 아키텍처 기반의 웹 어플리케이션 개발을 지원하는지 궁금해 했다.

ASP.NET MVC 관련 영상: 여기

Model View Controller(MVC) 프레임워크란 무엇인가?
MVC는 프레임워크 방법론이다. 그것은 3개의 컴포넌트 롤을 가지는데 models, views, controllers 이다.

1. Models
- 어플리케이션의 컴포넌트(상태 유지를 위한 응답, 데이터베이스 내부에 지속)
- 예를 들어서 우리는 하나의 Procuct클래스를 가지고 있는데 그것은 SQL 내부의 Products table로 부터 주문 데이터를 나타내기 위해 사용한다.)

2. Views
- 어플리케이션의 사용자 인터페이스를 표현하기 위한 응답 컴포넌트.
- 일반적으로 UI는 모델 데이터와 분리되어 생성
- 예를 들어서 우리는 Product를 수정하기 위한 View를 생성하는데 그것은 텍스트 상자들, 드롭다운 그리고 체크박스를 위치시킨다.

3. Controlles
- MVC 기반 어플리케이션에서 최종사용자 인터렉션, 조작모델, 디스플레이되는 UI를 보기 위한 선택 을 핸들링 하기 위한 응답 컴포넌트

MVC방법론을 사용하는 장점 중의 어플리케이션 내의 모델, 뷰, 컨트롤 의 관계를 깔끔하게 분리할 수 있다는 것이다. 이러한 관계를 깨끗하게 분리함으로써 더욱 쉽게 어플리케이션을 테스트 할 수 있고, 서로 다른 어플리케이션 컴포넌트를 깔끔하게 정의할 수 있다.

MVC 패턴은 Test-Driven 개발(TDD)을 활성화 시켜줄 수 있다.
-자동화된 유닛 테스트 도구를 이용해서 새로운 코드에 대한 다양한 요구를 소화한다.

ASP.NET MVC 프레임워크에 대한 간략한 소개 몇가지
- MVC 프레임워크내의 모든 코어에 대한 접촉은 인터페이스와 mockable(그것은 IHTTPRequest/IHttpResponse)이다. ASP.NET 프로세스 내의 컨트롤을 실행할 필요없이 어플리케이션을 유닛테스트 할 수 있다. 테스트를 위해 유닛테스트 프레임워크를 사용할 수 있다.

- 높은 사용 경험과 플러그인
MVC프레임워크 전부는 쉽게 교체하고 관리할 수 있게 디자인 되어져 있다. 예를 들어서 자신이 만든 뷰 엔진을 플러그 인 할 수 있고, 정책을 세우고 파라미터를 직렬화 할 수 있다. 또한 인젝션과 독립적인 IOC 컨테이너 모델을 지원한다.(Windsor, Spring.NET, NHibemate 등)
- 매우 파워풀한 URL 매핑 컴포넌트를 포함한다. 예를 들어서 수정 액션시 /products/edit/4 라는 맵을 쉽게 맵할 수 있다.
- MVC 프레임워크는 ASP.NET, ASPX, ASCX, 그리고 뷰 템플릿으로 마스터 마크업을 지원한다. 포스트-백 모델 대신에 컨트롤 클래스에 최종 사용자 인터렉션을 라우트 할 수 있다.
- ASP.NET MVC 프레임워크는 forms/windows 인증, URL 인증, 멤버쉽/롤, output, 데이터 캐싱, 세션/프로파일, 상태관리, 헬스 모니터링, 수정 시스템, 제공자 아키텍처와 같은 ASP.NET에 있는 특징을 충분히 지원한다.

'General .NET' 카테고리의 다른 글

기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
Interface란?  (0) 2008/02/18
스마트클라이언트 서명키 만들기  (0) 2008/02/17
Posted by -세티-
2008/02/19 00:14

Interface General .NET2008/02/19 00:14

Interface란?
- 클래스의 한 종류
- 클래스의 뼈대만 가지고 있음.

Interface의 구성요소
- 메소드, 속성, 이벤트, 인덱서
- 선언만 가능

Interface의 접근자
- 기본적으로 public

Interface의 상속
- 중복상속, 단일 상속이 가능

Interface를 사용하는 목적
- 그것은 구현(Implementation)을 하기 위함이다.
- 이것은 비완전한 클래스 이므로 완전해지기 위해 구현을 해야 한다.
- 반드시 내부의 구현되지 않은 모든 멤버를 구현해야 한다.
- 인터페이스는 클래스에서 구현되어야 한다.

인터페이스의 구현 예)
using System;
using System.Collections.Generic;
using System.Text;

namespace CA_Interface
{

    interface IPrint
    {
        void SetUp();
        void PowerOn();
        void PowerOff();
        void LowPrint();
        void MidPrint();
        void FastPrint();
    }
    public class Program : IPrint
    {
        public void SetUp() {
            Console.WriteLine("프린트 설정을 준비중!");
            Console.ReadLine();
            return;
        }
        public void PowerOn() {
            Console.WriteLine("프린트 파워를 켜는 중!");
            Console.ReadLine();
            return;
        }
        public void PowerOff() {
            Console.WriteLine("프린트 파워를 끄는 중");
            Console.ReadLine();
            return;
        }
        public void LowPrint() {
            Console.WriteLine("느린 속도로 인쇄하는 중");
            Console.ReadLine();
            return;
        }
        public void MidPrint() {
            Console.WriteLine("중간 속도로 인쇄하는 중");
            Console.ReadLine(); Console.ReadLine();
            return;
        }
        public void FastPrint() {
            Console.WriteLine("빠른 속도로 인쇄하는 중");
            Console.ReadLine();
            return;
        }

        static void Main(string[] args)
        {
            IPrint ip = new Program();
            ip.SetUp();
        }
    }
}

인터페이스 + 인터페이스(속성)의 예)
using System;
using System.Collections.Generic;
using System.Text;

namespace CA_Interface
{
    interface IPowerOn
    {
        int IFlag
        {
            get;
            set;
        }
    }
    interface IPrint
    {
        void SetUp();
        void PowerOn();
        void PowerOff();
        void LowPrint();
        void MidPrint();
        void FastPrint();
    }
    public class Program : IPrint, IPowerOn
    {
        public void SetUp() {
            Console.WriteLine("Ready, Print Setup");
            Console.ReadLine();
            return;
        }
        public void PowerOn() {
            Console.WriteLine("Print Power On");
            Console.ReadLine();
            return;
        }
        public void PowerOff() {
            Console.WriteLine("Print Power Off");
            Console.ReadLine();
            return;
        }
        public void LowPrint() {
            Console.WriteLine("Doing Low Speed Print");
            Console.ReadLine();
            return;
        }
        public void MidPrint() {
            Console.WriteLine("Doing Miduam Speed Print");
            Console.ReadLine(); Console.ReadLine();
            return;
        }
        public void FastPrint() {
            Console.WriteLine("Doing Fast Speed Print");
            Console.ReadLine();
            return;
        }

        private int iflag = 0;
        public int IFlag
        {
            get {
                return iflag;
            }
            set {
                iflag = value;
            }
        }

        static void Main(string[] args)
        {
            IPrint ip = new Program();
            ip.SetUp();

            Program p = new Program();
            p.IFlag = 1000;
        }
    }
}

'General .NET' 카테고리의 다른 글

닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
Interface란?  (0) 2008/02/18
스마트클라이언트 서명키 만들기  (0) 2008/02/17
닷넷으로 다국어 지원 폼 만들기  (0) 2008/02/12
Posted by -세티-
2008/02/18 13:22

Interface란? General .NET2008/02/18 13:22

interface의 사전적 의미는 경계면, 접점, 공유영역, 결부하다, 조합하다라는 의미를 가집니다.
인터페이스는 일종의 추상클래스 이지만 추상클래스보다 추상화가 높습니다.
우리가 추상클래스를 부분적으로 그려진 그림이라고 가정한다면 인터페이스는 가징 기본적인 것만 밑 그림으로 그려진 기본 설계도라고 할 수 있습니다.

인터페이스는 클래스를 작성하는데 도움을 줄 목적으로 사용됩니다.

인터페이스를 작성하는 키워드는 interface 입니다.
인터페이스의 예를 코드로 작성하면 다음과 같습니다.

interface IEmployee
{
     int Compare(object obj);
}
- 클래스나 구조체에 속하는 관련 동작의 그룹을 설명
- 메소드, 속성, 이벤트, 인덱서 등의 조합으로 구성될 수 있다.
- 하지만 필드는 포함될 수 없다.
- 기본적으로 public 이다.

인터페이스를 상속 받아서 클래스에서 구현하기 위해서는 정적이 아닌 공용 멤버여야 하고, 인터페이스 멤버와 동일한 이름이나 시그니처를 사용해야 한다.

인터페이스의 속성?
- 추상클래스와 비슷, 비추상 형식에서는 해당 멤버를 모두 구현 해야 함.
- 인스턴스화 할 수 없다.
- 메소드의 구현을 포함하지 않음.

명시적 인터페이스 구현
- 두 인터페이스의 시그니처가 동일한 경우
클래스에서 이 멤버를 구현하면 두 인터페이스에서 이 멤버를 해당 구현으로 사용한다.

interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}
class SampleClass : IControl, ISurface
{
    // Both ISurface.Paint and IControl.Paint call this method.
    public void Paint()
    {
    }
}

- 두 인터페이스의 시그니처가 다른 경우
이 경우에 구현시 구현이 잘못될 가능성이 존재한다.
특정 인터페이스의 멤버를 명시적으로 구현할려면 마침표를 이용해야 한다.
public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint"); ------ 1
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint"); -------2
    }
}

1은 IControl에서만 쓰였고, 2는 ISurface에서만 사용되었다.
두 메소드의 구현은 철저하게 별개이다.
SampleClass sc = new Sample();
IControl ic = (IControl)sc;
ic.Paint();

ISurface isf = (ISurface)sc;
sc.Paint();

'General .NET' 카테고리의 다른 글

ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
Interface란?  (0) 2008/02/18
스마트클라이언트 서명키 만들기  (0) 2008/02/17
닷넷으로 다국어 지원 폼 만들기  (0) 2008/02/12
using System.IO.Ports  (0) 2008/01/17
TAG interface
Posted by -세티-

개인인증서 만드는 명령어 참고 주소: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ko/dv_fxdeploy/html/a05b5f2f-d1f2-471a-8096-8b11f7554265.htm

스마트 클라이언트에서 클릭원스 매니페스트 서명 인증키가 제공되는데 이것은 기본적으로 테스트 인증서 입니다. 이 인증서는 생성 후 1년 밖에 사용하지 못합니다.
즉 1년 이후로는 만기가 되기 때문에 새로운 버전이 배포 되어도 업데이트가 이루어지지 않고 오류가 발생하여 아예 실행이 되지 않습니다.

더군다나 이렇게 생성된 테스트 인증서는 만기날짜 조정이 불가능 합니다.
그렇기 때문에 날짜가 조정가능한 한 인증서를 만들기 위해서는 cmd 창에서 아래 코드를 실행하면 개인인증서가 만들어 집니다.

makecert -r -pe -n "CN=HEC" -b 01/11/2006 -e 10/12/2100 -sky exchange -ss my

'General .NET' 카테고리의 다른 글

Interface  (0) 2008/02/19
Interface란?  (0) 2008/02/18
스마트클라이언트 서명키 만들기  (0) 2008/02/17
닷넷으로 다국어 지원 폼 만들기  (0) 2008/02/12
using System.IO.Ports  (0) 2008/01/17
GDI Character Set  (0) 2008/01/17
Posted by -세티-
http://search.naver.com/search.naver?sm=tab_hty&where=nexearch&query=resx%2C+%B4%D9%B1%B9%BE%EE

'General .NET' 카테고리의 다른 글

Interface란?  (0) 2008/02/18
스마트클라이언트 서명키 만들기  (0) 2008/02/17
닷넷으로 다국어 지원 폼 만들기  (0) 2008/02/12
using System.IO.Ports  (0) 2008/01/17
GDI Character Set  (0) 2008/01/17
WinForm Events Flow  (0) 2008/01/09
Posted by -세티-