사용자의 입력을 받고, 이 데이터를 서버로 보내보는 작업을 해보자.
일단 클라이언트, 서버는 이전 포스팅에서 준비해놨으니, 이번에는 사용자 입력만 받아서 서버로 보내보자.
통신 방법
간단하게 사용자 입력을 받아서 변수 하나에 넣어두면 될것 같고, 이 변수를 인코딩을 통해 byte[] 형태로 만들어준뒤, Stream 을 통해 서버로 보내주는 작업이 필요해보인다.
public class ClientManager
{
private static ClientManager clientMngInstance;
private TcpClient Client;
static public ClientManager Instance()
{
if(clientMngInstance == null)
{
clientMngInstance = new ClientManager();
}
return clientMngInstance;
}
public void ConnectToServer()
{
// (1) IP 주소와 포트를 지정하고 TCP 연결
while (true)
{
try
{
Console.WriteLine("Client 연결 요청 중 . . .");
Client = new TcpClient("127.0.0.1", 7000);
Thread.Sleep(1000);
break;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Console.WriteLine("서버 연결 완료 !! ==============================");
SendDataToServer();
}
public void SendDataToServer()
{
NetworkStream Stream = null;
while (true)
{
Console.Write("메시지를 입력하세요 : ");
string? Msg = "";
if(Msg == "q")
{
break;
}
while (true)
{
Msg = Console.ReadLine();
if (Msg != null)
{
break;
}
Console.WriteLine("메시지를 입력해주세요.");
}
byte[] Buff = Encoding.ASCII.GetBytes(Msg);
Stream = Client.GetStream();
// 서버로 보내는 데이터
Stream.Write(Buff, 0, Buff.Length);
}
Stream.Close();
Client.Close();
}
}
간단하게 사용자 입력을 받아서 인코딩 작업을 통해 byte[] 형태로 만들어준 뒤, 스트림을 이용해서 서버로 데이터를 보내주었다. 이제 사용자가 입력한 문자는 서버로 넘어가게 되고, 서버에서는 이렇게 받아온 데이터를 콘솔창에 찍어줄 수 있다.
다만, 한글과 같은 경우 제대로 데이터를 받아오지 못하는데, 이는 영어는 1바이트, 한글은 한문자당 2바이트 이다 보니, 사용자 입력을 byte[] 로 형태를 바꿔주는 과정에서 어디까지가 한문자인지 판단하지 못하게되는 오류가 발생하는것이다.
인코딩이라고 함은, 문자를 어떤 방식으로 표현할지에 대한 약속 정도로 생각할 수 있다. 그리고 이러한 인코딩 방식에는 여러가지가 있는데, 아스키코드 혹은 유니코드 UTF-8 방식 등이 존재한다.
지금까지 우리가 사용하던 인코딩 방식은 아스키코드 방식이었으며, 이는 한글과 같은 문자를 표현하기에는 부족한 방식이다. 이를 해결한 방식이 유니코드 방식이며, 유니코드 방식은 영어 뿐 아니라 한글과 같은 2바이트 문자까지도 표현할 수 있는 능력이 있다. 그렇다면 인코딩 방식을 아스키코드가 아닌 유니코드로 인코딩 하면 어떨까? 서버에서 문자를 받아오는 인코딩 방식과 클라이언트에서 서버로 문자를 보내는 인코딩 방식을 모두 유니코드로 바꿔준 뒤 실행해보았다.
예상했던것과 같이 한글 또한 제대로 서버에 넘겨줄 수 있게 되었다.
'네트워크 > 채팅 프로그램' 카테고리의 다른 글
[TCP/IP 소켓 프로그래밍] Winform 을 이용한 채팅 프로그램 - 3 (0) | 2023.10.25 |
---|---|
[TCP/IP 소켓 프로그래밍] Winform 을 이용한 채팅 프로그램 - 2 (0) | 2023.10.23 |
[TCP/IP 소켓 프로그래밍] Winform 을 이용한 채팅 프로그램 - 1 (1) | 2023.10.23 |
[TCP/IP 소켓 프로그래밍] 서버와 통신하기 (0) | 2023.10.11 |