Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 아마존 mysql
- mysql 외부접속
- 원격
- 소켓통신
- 구글시트
- workbench 외부접속
- spreadsheet
- AWS EC2 ftp
- 유니티
- 리눅스 mysql
- 언리얼 엔진4
- ftp 외부접속
- 코루틴
- unity
- error 1045
- coroutine
- Read 함수 뻗음
- AWS EC2 ssh
- AWS EC2
- 언리얼 AI
- 제네릭
- 우분투 mysql
- 스프레드시트
- error 2002
- 연결
- generic
- read
- 유니티 소켓통신
- NetworkStream
- ssh pem
Archives
- Today
- Total
공부한거 잊었을 때 보려고 만든 블로그
NetworkStream.Read() 뻗음 (C# 소켓 통신할 때 주의할 점) 본문
NetworkStream.Read() 함수는 지정한 byte를 다 읽을 때까지 코드가 blocking된다.
그래서 보통while(true) 안에서 Read() 하며, blocking이 되기 때문에 무한루프에 빠지는 경우가 잘 없다.
가끔 읽지 말아야할 때가 있어서 조건문으로 Read 함수를 감싸는 경우
if문을 건너뛰면 Read의 Blocking이 사라져 무한루프가 되면서 프로그램이 뻗을 수 있다.
나는 Unity 환경에서 돌리고 있어서 while 대신 Update문에서 if 조건을 걸고 Read하는 상태로 바꿨다.
두번째로 주의할 점은 원인이 이게 맞는지 모르겠는데,
문자열 길이를 먼저받고 그 길이만큼 문자열을 받는 코드에서 서버와 클라이언트 간 통신할 때 패킷이 손실되면
문자열의 길이가 이상하게 들어올 때가 있다.
그 길이만큼 읽으려다보면 오버플로우가 나서 프로그램이 뻗었고
내가 보내는 패킷이 아무리 길어도 300자 이상 보낼 일이 없었기 때문에 300자가 넘으면 처리하지 않도록 예외처리를 했다.
'서버 프로그래밍' 카테고리의 다른 글
소켓 통신에서 버퍼 사이즈의 폭발(?) (0) | 2023.05.19 |
---|---|
소켓통신 게임프로그래밍에 대한 고찰 (0) | 2023.03.22 |