오전엔 운영체제 7,8,9 장을 훑어보고
WSASend마무리
Client를 만들어야하는데 유니티로 또 시간 쏟기 싫어서
C#연습도 할겸 DummyClient확장도 할수있으니 간단하게 C#으로 제작하였다
C#은 뭐가 그렇게 변수가 별로 없는데도 알아서 착착 해주는지 모르겠다..
namespace DummyClient
{
class Program
{
public static void Main(string[] args)
{
TcpClient tcpClient = new TcpClient();
try
{
tcpClient.Connect("127.0.0.1", 7777);
Console.WriteLine("서버에 연결 되었습니다.");
}
catch (Exception ex)
{
Console.WriteLine($"서버 연결 실패 : {ex.Message}");
}
Console.WriteLine("서버에 보낼 메시지를 입력하세요. (exit 입력 시 종료)");
NetworkStream stream = tcpClient.GetStream();
while (true)
{
Console.Write("> ");
string input = Console.ReadLine();
//입력 없을시 다시처음부터
if (string.IsNullOrEmpty(input))
continue;
if (input.ToLower() == "exit")
break;
//문자->바이트 배열
byte[] buffer = Encoding.UTF8.GetBytes(input);
//서버에 전송
stream.Write(buffer, 0, buffer.Length);
//에코받기
byte[] readbuffer = new byte[1000];
int transferredBytes = stream.Read(readbuffer);
string echoMsg = Encoding.UTF8.GetString(readbuffer);
Console.WriteLine($"서버에서 온 메세지 : {echoMsg} ({transferredBytes} bytes)");
}
}
}
}
큰덩어리 main함수 에서 떼서구조묶기
IocpServer: WSA세팅/IOCP객체 관리/listener제어 (Shared_ptr사용)
Listener: accept용 socket 관리/accept된 클라이언트 iocp와연결/Client -> 클라이언트 소켓관리/accept용 Overlapped확장 구조체 관리 (Shared_ptr사용)
Client: 연결클라이언트 소켓관리/recive 버퍼 관리/recive overlapped확장 관리 (Shared_ptr사용)
++추가된 기능
ClientManager: 연결된 클라이언트 추적관리 (싱글톤 사용)
ObjectPool: 오브젝트 통합 풀링을 위한 템플릿/여러군데서 사용할수 있으니 락 필수
PoolManager: 오브젝트풀 Static으로 전역으로 관리하기
//오늘의 용어
dangling pointer : 이미 해제된 메모리를 참조하고있는 포인터 (람다에서도 발생할수있으므로 shared_ptr로 넘겨주면 좋다)
RAII = Resource Acquisition Is Initialization
객체 초기화시 자원 획득이라는 말인데 Shared_ptr 이나 lock_guard와 같은 지역성이 있고
지역이 벗어났을때 자동 해제되는 특징을 가진 패턴이다
enable_shared_from_this: 쉐어드 포인터를 사용하는 객체에서 자기자신 This대신 shared_ptr로 받을수 있게하는 상속자
//앞으로 좀더 파봐야할것
Shared_ptr : 값을 부여할때 초기화를 어떻게 하느냐에 따라서 dangling pointer발생 할 여지가 있기 때문에 기존에 raw pointer를 사용할때보다 관리는 편하지만 제대로 모르고 사용하면 중복소유 수 있기 때문이다.
Ramda : 캡처에 따라서 값이 없을수도 있기 때문에 좀 더 익숙해질 필요 있다 (캡처 쪽을 좀더 파볼것)
구조화가 되면 될수록 작업속도가 빨라지고 오히려 머리가 돌아가는느낌이었다.
구조화 완료후 통신이 되는것 확인했다.
슬슬 작업 계획을 짜서 기능별로 날짜 지정해서 진행해야할것같다.
'학습 노트 > 개인학습' 카테고리의 다른 글
250517 토요일 @ 20일차 (0) | 2025.05.17 |
---|---|
250516 금요일 @ 19일차 (0) | 2025.05.17 |
250514 수요일 @ 17일차 (0) | 2025.05.15 |
250513 화요일 @ 16일차 (0) | 2025.05.14 |
250512 월요일 @ 15일차 (0) | 2025.05.13 |
댓글