이 내용은 TCP/IP 소켓 프로그래밍 C#을 참고 하였습니다.
.NET 기반의 Socket 클래스를 이용한 Echo Client 프로그램
.NET 기반의 Socket 클래스를 이용한 Echo Client 프로그램
// --------------------------
// TcpEchoClientSocket.cs
// --------------------------
using System;
using System.Text;
using System.IO;
using System.Net.Sockets;
using System.Net;
class TcpEchoClientSocket {
static void Main(string[] args) {
if ((args.Length < 2) || (args.Length > 3)) { // 파라미터 갯수 확인
throw new ArgumentException("Parameters: <Sever> <Word> [<Port>]");
}
String server = args[0]; // 호스트명 또는 IP
// 입력된 String 객체를 byte로 변환
byte[] byteBuffer = Encoding.Unicode.GetBytes(args[1]);
// Port입력하면 값으로 없으면 Default 7로
int servPort = (args.Length == 3) ? Int32.Parse(args[2]) : 7;
Socket sock = null;
try {
// TCP socket 인스턴트 생성
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
// 서버 IPEndPoint 인스턴스 생성
// Resolve() 메소드가 한개 이상의 IP를 반환한다.
IPEndPoint serverEndPoint = new IPEndPoint(Dns.GetHostEntry(server).AddressList[0],
servPort);
// 서버의 해당 포트에 소켓을 연결한다.
sock.Connect(serverEndPoint);
Console.WriteLine("Connect to Server ... sending echo string");
// 인코딩된 스트링을 서버로 전송
sock.Send(byteBuffer, 0, byteBuffer.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes to server...", byteBuffer.Length);
int totalBytesRcvd = 0;
int bytesRcvd = 0;
// 서버로부터 스트링을 다시 읽는다.
while (totalBytesRcvd < byteBuffer.Length) {
if ((bytesRcvd = sock.Receive(byteBuffer, totalBytesRcvd,
byteBuffer.Length - totalBytesRcvd, SocketFlags.None)) == 0) {
Console.WriteLine("Connection closed prematurely.");
break;
}
totalBytesRcvd += bytesRcvd;
}
Console.WriteLine("Received {0} bytes from server: {1}", totalBytesRcvd,
Encoding.Unicode.GetString(byteBuffer, 0, totalBytesRcvd) );
} catch (Exception e) {
Console.WriteLine(e.Message);
} finally {
sock.Close();
}
}
}
'C#' 카테고리의 다른 글
GUI방식으로 구성한 EchoClient (0) | 2006.05.30 |
---|---|
간단한 Class 테스트 (0) | 2006.05.29 |
TcpEchoServer 프로그램 (0) | 2006.05.28 |
직접 코드로 입력한 간단한 C# 프로그램 (0) | 2006.05.28 |
TcpEchoClient 프로그램 (0) | 2006.05.26 |