일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 언리얼 엔진4
- AWS EC2
- 구글시트
- 스프레드시트
- 연결
- 아마존 mysql
- generic
- 언리얼 AI
- 우분투 mysql
- coroutine
- unity
- 소켓통신
- 리눅스 mysql
- ftp 외부접속
- mysql 외부접속
- workbench 외부접속
- error 1045
- 유니티
- Read 함수 뻗음
- 유니티 소켓통신
- error 2002
- AWS EC2 ftp
- ssh pem
- read
- spreadsheet
- 코루틴
- 원격
- 제네릭
- AWS EC2 ssh
- NetworkStream
- Today
- Total
목록서버 프로그래밍 (3)
공부한거 잊었을 때 보려고 만든 블로그

https://parcon.tistory.com/22 NetworkStream.Read() 뻗음 (C# 소켓 통신할 때 주의할 점) NetworkStream.Read() 함수는 지정한 byte를 다 읽을 때까지 코드가 blocking된다. 그래서 보통while(true) 안에서 Read() 하며, blocking이 되기 때문에 무한루프에 빠지는 경우가 잘 없다. 가끔 읽지 말아야할 때 parcon.tistory.com 위 링크에서 패킷 길이가 300 이상일 때 손상된 패킷으로 간주하고 처리하지 않도록 예외처리 했다. 이 경우에는 클라이언트 쪽에서는 해결이 되는 듯 보였지만 서버 쪽에서는 여전히 말도 안되는 사이즈의 패킷을 보내고 있었다. (마찬가지로 서버에서도 패킷 전송 전 버퍼의 길이가 300 이상이라..

NetworkStream.Read() 함수는 지정한 byte를 다 읽을 때까지 코드가 blocking된다. 그래서 보통while(true) 안에서 Read() 하며, blocking이 되기 때문에 무한루프에 빠지는 경우가 잘 없다. 가끔 읽지 말아야할 때가 있어서 조건문으로 Read 함수를 감싸는 경우 if문을 건너뛰면 Read의 Blocking이 사라져 무한루프가 되면서 프로그램이 뻗을 수 있다. 나는 Unity 환경에서 돌리고 있어서 while 대신 Update문에서 if 조건을 걸고 Read하는 상태로 바꿨다. 두번째로 주의할 점은 원인이 이게 맞는지 모르겠는데, 문자열 길이를 먼저받고 그 길이만큼 문자열을 받는 코드에서 서버와 클라이언트 간 통신할 때 패킷이 손실되면 문자열의 길이가 이상하게 들어..

유니티 클라이언트와 파이썬 TCP/IP 서버를 구현하여 소켓통신으로 온라인 게임의 기반을 만들었다. 서버와 클라이언트는 JSON을 주고 받으며 통신하고, 약속된 type의 키가 아니라면 아무런 동작을 하지 않는다. 예시) 클라이언트가 서버로 접속 요청을 하면 서버는 클라이언트와의 통신을 스레드로 처리한다. 스레드로 처리하기 때문에 이 패킷을 누가 보내는지 알고 있으므로 유저 정보는 보낼 필요가 없다. {"type":"enter_room"} 을 클라이언트가 서버로 보내면 서버는 받은 JSON의 "type" 키 값을 읽는다. "패킷을 보내는 클라이언트가 방 입장을 요청한다." 라는 정보를 받았으므로 서버의 리스트 또는 딕셔너리에 방을 생성하고 해당 유저를 추가한다. 자세한 구조는 코드를 정리하고 포스팅하도록..