ASP.NET์์ TCP ์ฐ๊ฒฐ์ ์ฃผ๋ก TcpClient ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฐ๊ฒฐ์ ์์ฑํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ ์ ์์ต๋๋ค.
๐ ๋ชฉ์ฐจ
TCP ์ฐ๊ฒฐ ์ค์ ๊ณผ์
TCP ์ฐ๊ฒฐ ์ค์ ์ 3-way handshake๋ก ์๋ ค์ง ๊ณผ์ ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ์ด ๊ณผ์ ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ ผ๋ฆฌ์ ์ธ ์ฐ๊ฒฐ์ ์์ฑํ๊ณ ๋ฐ์ดํฐ ์ก์์ ์ ์์ํ๋ ์ค๋น ๋จ๊ณ์ ๋๋ค.
TCP ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ธฐ๋ณธ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐ ์์ฒญ(SYN)
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ TCP ์ฐ๊ฒฐ์ ์์ฒญํ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ ๋๋ค.
- ์ด ๋ฉ์์ง๋ SYN ํ๋๊ทธ๊ฐ ํฌํจ๋ ํจํท์ ๋๋ค.
- ์๋ฒ๊ฐ ์์ฒญ ์น์ธ(SYN-ACK)
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฝํ๋ฉฐ SYN-ACK ํจํท์ผ๋ก ์๋ตํฉ๋๋ค.
- ์ด๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐํ ์ค๋น๊ฐ ๋์์์ ์๋ฏธํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ต(ACK)
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ SYN-ACK์ ๋ํด ํ์ธ ์๋ต(ACK)์ ๋ณด๋ ๋๋ค.
- ์ด๋ก์จ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ TCP ์ฐ๊ฒฐ์ด ์๋ฃ๋ฉ๋๋ค.
TCP ์ฐ๊ฒฐ ์ค์ ๊ธฐ๋ณธ ์ฝ๋
TcpClient client = new TcpClient(serverip, port)
1. TcpClient ์์ฑ์:
- IP ์ฃผ์(serverip)์ ํฌํธ(port)๋ฅผ ์ ๋ฌํ์ฌ ์๋ฒ์ ์ฐ๊ฒฐ์ ์๋ํฉ๋๋ค.
- ์ด ๊ณผ์ ์์ TCP์ 3-way handshake๊ฐ ์๋์ผ๋ก ์ํ๋ฉ๋๋ค.
2. ๋คํธ์ํฌ ์คํธ๋ฆผ ์์ฑ:
- ์ฐ๊ฒฐ์ด ์ฑ๊ณตํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ธฐ ์ํด ๋คํธ์ํฌ ์คํธ๋ฆผ์ ์์ฑํฉ๋๋ค.
NetworkStream stream = client.GetStream();
3. ๋ฐ์ดํฐ ์ก์ :
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ๋ณํํ ๋ค ์คํธ๋ฆผ์ ํตํด ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
byte[] data = Encoding.UTF8.GetBytes("Hello Server");
stream.Wtire(data, 0, data.Length);
4. ๋ฐ์ดํฐ ์์ :
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค.
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
TCP ์ฐ๊ฒฐ ์ค์ ํ ๋์ ์ฃผ์ ๊ฐ๋
1. IP ์ฃผ์์ ํฌํธ
2. ReceiveTimeout(์์ ํ์์์)
client.ReceiveTimeout = 10 * 1000;
- ์๋ฒ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ์ ์ค์ ํฉ๋๋ค(๋จ์: ๋ฐ๋ฆฌ์ด)
- ์ค์ ํ ์๊ฐ ๋ด์ ์๋ต์ด ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค(IOException)
3. NetworkStream
- TCP ์ฐ๊ฒฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ ์คํธ๋ฆผ์ ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ์ด ํ์ํฉ๋๋ค.
TCP ์ฐ๊ฒฐ ์ค์ ์ ์ฃผ์์ฌํญ
1. ์์ธ ์ฒ๋ฆฌ
- ๋คํธ์ํฌ ์ฐ๊ฒฐ ์คํจ, ํ์์์, ์๋ฒ ์ค๋ฅ ๋ฑ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ ์ ํ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
try
{
TcpClient client = new TcpClient(serverip, port);
NetWorkStream stream = client.GetStream();
// ๋ฐ์ดํฐ ์ก์์ ๋ก์ง
}
catch(SocketException ex)
{
Console.WriteLine("์๋ฒ ์ฐ๊ฒฐ ์คํจ:" + ex.Message);
}
catch(IOException ex)
{
Console.WriteLine("๋ฐ์ดํฐ ์ก์์ ์คํจ:" + ex.Message);
}
2. ๋ฆฌ์ค์ ๊ด๋ฆฌ
- TCP ์ฐ๊ฒฐ์ ๋คํธ์ํฌ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ์ฌ์ฉ์ด ๋๋ ๋ค ๋ฐ๋์ ์คํธ๋ฆผ๊ณผ ํด๋ผ์ด์ธํธ๋ฅผ ๋ซ์์ผํฉ๋๋ค.
- ๋ฆฌ์์ค ๋์ ๋ฐฉ์ง ์ฝ๋:
TcpClient client = null;
NetworkStram stream = null;
try
{
client = new TcpClient(serverip, port);
stream = client.GetStream();
// ๋ฐ์ดํฐ ์ก์์ ๋ก์ง
}
finally
{
stream?.Close();
client?.Close();
}
3. ๋น๋๊ธฐ ๋ฐฉ์ ์ฌ์ฉ
- ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ ๋๊ธฐ๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์ถ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ๊ณ์ ์ํํ ์ ์์ต๋๋ค.
- ์: ๋น๋๊ธฐ ์ฐ๊ฒฐ ์ค์
TcpClient client = new TcpClient();
await client.ConnectAsync(serverip, port);
NetworkStream stream = client.GetStream();
'C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] ASP.NET MasterPage ๋? ๊ณตํต ๋ ์ด์์ ์ ์ํ๊ธฐ (0) | 2025.03.28 |
---|---|
[C#] ASP.NET 4.0 WebForms Global.asax ํ์ผ (0) | 2025.02.28 |
[C#] var ํค์๋์ ์๋ฌต์ ํ์ ์ถ๋ก (0) | 2025.02.16 |
[C#] ASP.NET 4.0 ๋ ๊ฑฐ์ ์ฝ๋ web.config ํ์ผ ๋ถ์ (0) | 2024.12.30 |
[C#] Equals() ๋ฉ์๋์ == ์ฐ์ฐ์ ์ฐจ์ด (0) | 2024.12.15 |