본문 바로가기

C#, C++

(4)
c#을 이용한 TCP/IP 서버-클라이언트 소켓(Socket)통신 2개의 컴퓨터에서 데이터를 주고받을때 가장 자주 사용되는 방식이 소켓을 이용한 방식이다. C#에서는 다른 플랫폼과 마찬가지로 소켓을 사용하기 위한 간편한 라이브러리를 제공한다. 우리는 서버쪽 s_socket과 클라이언트쪽 c_socket을 만들 것이다. 서버는 계속 켜져있는 컴퓨터라고 생각하면 쉽다. 계속 켜져있는 채로 클라이언트 PC의 접속을 대기(Listen)한다. 클라이언트는 항상 켜져있을 필요는 없다. 필요할 때 서버쪽으로 Connect신호를 보내면, 서버쪽에서 이를 받아들이고 클라이언트와의 연결을 성립시킨다.(Accept) 연결이 성립되었다면 우리는 본격적으로 데이터를 주고 받을 수 있다. 먼저, 서버쪽 소켓의 Start() 와 Close()를 만들어보자. Start()는 Server 메인소켓을..
WPF ItemsControl을 이용해서 UIelement를 반복해서 표현하는 방법(xaml에서 for문, foreach문을 대신해서 사용할 수 있는 방법) WPF는 xaml, xaml.cs, viewmodel로 나누어서 프로그램을 만든다. viewmodel이나 xaml.cs(비하인드 코드) 에서는 for문이나 while문, foreach문 같은 반복문을 손 쉽게 사용할 수 있다. 하지만, xaml에서 직접적으로 반복문을 사용하는 방법은 없는데 똑같은 이미지를 반복해서 넣는다거나 똑같은 버튼, 텍스트박스를 반복해서 넣는 경우, 또는 각 element마다 들어가는 Content가 조금씩 다르다거나 Grid.Row 나 width같은 속성들이 규칙적으로 바뀌어서 여러개가 들어가야 하는 경우, xaml에서 for문이나 while문 같은 것들이 사용되면 좋겠다고 생각하게 되는 경우가 많았다. 하지만 이는 현실적으로 불가능하고, 비하인드 코드에서 for문을 써서 넣으려..
C# 바인딩 (onetime, oneway, twoway, onewaytosource) C#에서 인터페이스에 나타나는 값을 동적으로 표현할때 데이터바인딩을 사용한다. XAML의 내용이 이렇게 선언하면 TEXTBOX안에 표시되는 내용이 ViewModel이라는 뷰모델 클래스의 name이라는 요소와 연결되게 된다. 여기서 설정하는 MODE는 onetime, oneway, twoway, onewaytosource 중에 하나로 설정하는데, -onetime 만약에 현재 뷰모델의 name이라는 요소가 string타입의 "사과"라고 저장되어 있다고 하자. 만약 MODE를 onetime으로 연결 한다면, 인터페이스의 텍스트블록 안에 "사과"라는 글자가 뜨게 된다. 하지만, 이때 단 한번만 바인딩이 되고 이후로는 연결이 끊어지게 되서 뷰모델 안의 string name을 바꿔도 텍스트 박스의 값이 영향을 받지..
C# 제네릭 <generic> c# 클래스를 정의할 때, 들어가는 인자값이나 리턴값 등 클래스 내의 모든 데이터 타입을 지정한다. 하지만, 어떤 경우에는 거의 모든 내용이 같은데, 일부 데이터타입만 다른 경우가 존재한다. 예를들어, public class MyStack { int[] _elements; int pos = 0; public MyStack() { _elements = new int[100]; } public void Push(int element) { _elements[++pos] = element; } public int Pop() { return _elements[pos--]; } } class Program { static void Main(string[] args) { MyStack stack1 = new MySt..