이전 글에서 서버를 구현하는 것을 알아 보았고 이번 글에서는 클라이언트에 대해 알아 볼 것이다.
클라이언트에서도 서버와 동일하게 SocketAsyncEventArgs 클래스를 사용했으며 구현 소스를 통해 알아보자.
1. 서버 연결
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(IPAddress.Parse(tb_server_ip.Text), int.Parse(tb_server_port.Text));
JObject data = new JObject();
data.Add("type", "init");
data.Add("text", tb_userid.Text);
// json -> string parsing
string make_data = JsonConvert.SerializeObject(data);
// string -> byte[] parsing (utf8)
byte[] byte_data = Encoding.UTF8.GetBytes(make_data);
client.Send(byte_data);
SocketAsyncEventArgs receiveAsync = new SocketAsyncEventArgs();
receiveAsync.Completed += new EventHandler<SocketAsyncEventArgs>(receiveAsync_Completed);
receiveAsync.SetBuffer(new byte[4], 0, 4);
receiveAsync.UserToken = client;
client.ReceiveAsync(receiveAsync);
클라이언트에서 서버에 연결하는 방법은 다음과 같다. 우선 Socket을 만들어주고
Connect 함수의 파라미터에 접속할 서버의 IP와 Port를 입력해준다.
그 다음 JOject를 이용하여 key값으로 "type"에서 "init"을 써주었고 아래 "text"에는 보낼 메세지를 담는식으로 작업했다.
채팅 프로그램에서 필자가 사용할 type의 구분은 이렇게 구분지었다.
Type key 종류
1. init
-> 처음 연결했을 때만 init으로 보내어 서버에서는 init으로 받았을 경우 접속한 사용자의 이름 저장한다.
2. op
-> 첫 서버 연결(init)이 끝난 후 이후에 채팅 메세지들을 보낼 때 사용한다.
그러하여 처음 연결 시 type에 init을 이용하여 사용자 이름을 json 형식으로 만든 후 해당 소켓으로 Send하는 방식을 이용했다. 아래의 SocketAsyncEventArgs 과정은 이전 글과 동일하기에 참고하면 될 것같다.
2. 서버에게 메세지 보내기
JObject data = new JObject();
data.Add("type", "op");
data.Add("text", rtb_send_Text.Text);
// json -> string parsing
string make_data = JsonConvert.SerializeObject(data);
// string -> byte[] parsing (utf8)
byte[] send_text = Encoding.UTF8.GetBytes(make_data);
// server send
client.Send(send_text);
위와 같은 방식으로 json 형식을 byte[]로 변환하여 서버에게 메세지를 보내는 방식으로 진행하였다.
이렇게 보니 서버보단 클라이언트는 확실히 그냥 연결후 데이터 가공하여 보내면 되는 방식이라 뭐 없는 것 같다.
하지만 아직 암복호화 작업은 아직 안되었기에 이후에 작업 후에 다시 수정을 할 예정이다.
반응형
'Project History > 다중 기능을 포함한 채팅 프로그램' 카테고리의 다른 글
[C# 채팅 프로그램 #05] 채팅 프로그램 프로젝트 최종 시연 영상 및 설명 (0) | 2022.02.24 |
---|---|
[C# 채팅 프로그램 #04] AES-256 암호화를 이용하여 JSON 메세지 송 수신 기능 구현 (0) | 2022.02.23 |
[C# 채팅 프로그램 #03] TCP/IP통신에서 특정 클라이언트에게만 메세지 보내기 (0) | 2022.02.10 |
[C# 채팅 프로그램 #01] IOCP - EAP 패턴을 이용한 비동기 TCP/IP 서버 구현 (SocketAsyncEventArgs) (0) | 2022.02.10 |
[C# 채팅 프로그램 #00] 작업 환경 / 기능 구현 리스트 / UI 제작 (0) | 2022.02.10 |
댓글