<클라이언트, 서버의 구조를 안다>
클래스 라이브러리 이용시 Web 등의 고도 네트워크 서비스를 간단히 이용할 수 있음
클라이언트(client) : 네트워크 통해 어떠한 서비스를 요구하는 컴퓨터나 소프트웨어
서버(server) : 이 요구를 기다리며 서비스를 제공하는 측
서버가 클라이언트로부터 접속을 기다림
클라이언트가 접속시 문자열 송수신하는 서비스가 이뤄짐
<서버의 프로그램을 작성한다>
서버를 작성한다
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
class Sample45
{
public static string HOST = "localhost";
public static int PORT = 10000; //대기하는 포트 번호 지정
public static void Main()
{
IPHostEntry ih = Dns.GetHostEntry(HOST);
TcpListener tl = new TcpListener(ih.AddressList[0], PORT); //서버 소켓 작성
tl.Start();
Console.WriteLine("대기합니다.");
while(true)
{
TcpClient tc = tl.AcceptTcpClient(); //접속을 받아들임
StreamWriter sw = new StreamWriter(tc.GetStream()); //출력 스트림 작성
sw.WriteLine("이쪽은 서버입니다."); //문자열 써냄
sw.Flush();
sw.Close();
tc.Close(); //접속을 클로즈
break;
}
}
}
-> 콘솔 화면의 애플리케이션 서버
다음 클래스 사용됨
System.Net.Sockets.TcpListener 클래스
TcpListener(IPAddress ad, int port) 컨스트럭터 - 지정한 주소, 포트 번호 상에서 대기하는 접속을 작성
TcpClient AcceptTcpClient() 메서드 - 클라이언트로부터의 접속 요구를 받음
<클라이언트의 프로그램을 작성한다>
클라이언트를 작성한다
using System;
using System.IO;
using System.Net.Sockets;
using System.Windows.Forms;
class Sample4C : Form
{
public static string HOST = "localhost"; //호스트명 지정
public static int PORT = 10000; //포트 번호 지정
private TextBox tb;
private Button bt;
public static void Main()
{
Application.Run(new Sample4C());
}
public Sample4C()
{
this.Text = "샘플";
this.Width = 300; this.Height = 300;
tb.new TextBox();
tb.Multiline = true;
tb.ScrollBars = ScrollBars.Vertical;
tb.Height = 150;
tb.Dock = DockStyle.Bottom;
tb.Parent = this;
bt.Parent = this;
bt.Click += new EventHandler(bt_Click);
}
public void bt_Click(Object sender, EventArgs e) //서버에 접속합니다.
{
TcpClient tc = new TcpClient(HOST, PORT);
StreamReader sr = new StreamReader(tc.GetStream()); //입력 스트림을 작성합니다.
String str = sr.ReadLine(); //문자열을 읽어 들입니다
tb.Text = str;
sr.Close();
tc.Close(); //접속을 클로즈함
}
}
Sample4의 관련 클래스
System.Net.Sockets.TcpClient 클래스
TcpClient() 컨스트럭터 - 지정한 주소, 포트 번호로의 접속을 작성
Close() 메서드 - 클로스한다
서버의 호스트명
같은 장치상의 서버에 접속하기 위해 "localhost"라는 호스트명을 지정함
다른 서버에 접속하기 위해서 다른 호스트명을 사용하기
클라이언트의 '접속' 버튼 누르면 서버에 접속해서 문자열을 수신함
또한 처음에 서버가 실행되지 않으면 클라이언트가 문자열을 받을 수 없으므로 주의하기
<TCP의 구조를 안다>
TCP(Transmission Conrol Protocol)라는 구조를 사용해서 클라이언트와 서버를 접속함
TCP에 의해 클라이언트와 서버 간의 접속이 확립되면 그 이후는 파일롸 마찬가지로 서로 문자열을 써내거나 읽어들일 수 있음
절차
1 서버 상에서 TCPListener를 작성하고, 클라이언트로부터의 접속을 기다린다
2 클라이언트가 TCPClient를 작성하면 서버와 클라이언트 간에서 접속된 확립된다
3 서버가 문자열을 써내고 그것을 클라이언트가 읽어 들인다
4 접속을 클로즈한다
TCP : 인터넷을 지탱하는 기본 프로토콜
접속하는 컴퓨터를 특정하기 위해서 IP주소(호스트명)를 지정함
또한 그 컴퓨터 내에서 접속하는 프로그램을 트겆앟기 위해서 포트 번호(port number)라는 수치를 사용함
서버는 지정된 포트 번호에서 클라이언트 접속을 기다림
클라이언트는 그 포트 번호를 지정해서 서버에 접속
작은 수의 포트 번호는 웹이나 FTP처럼 자주 사용되는 다른 네트워크 프로그램을 위해 예약되어 있기 때문에 샘플에서는 10000이라는 큰 번호를 사용함
TCP와 UDP
TCP는 클라이언트와 서버의 접속을 확립하고 나서 데이터의 송수신을 시행함
이밖에 인터넷에서는 하나의 컴퓨터로부터 일방적으로 데이터를 송신하기 위한 프로토콜인 UDP(User Datagram Protocol)가 사용되기도 함
프로그램에서 UDP를 다룰 때 UDPClient 클래스를 사용함
출처) 그림으로 배우는 C# 프로그래밍
'C#' 카테고리의 다른 글
[C#] TCP 클라이언트 클래스와 사용법 (0) | 2024.06.24 |
---|---|
[C#] TCP 서버 TcpListener 클래스와 사용법(예제) (0) | 2024.06.21 |
[C#] WPF를 이용한 특정 값에 도달했을 때 알람이 울리고 UI가 깜빡이는 예제 (0) | 2024.06.10 |
[C#] Task async / await (0) | 2024.05.29 |
[C#] 클래스의 설계 (0) | 2024.05.27 |