Posts
Q&A
Name์ด ํ๋ฒ ์ค๋ฉด ์ด๊ธฐํ๋๋ ์ด์
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ์ฌ์ค ๋ฐ๋ก ์ง๋ฌธ๋๋ฆฌ๋๊ฑด ์๋๊ณ ๋ณดํต ๋ช์๊ฐ๋์ ์ฝ์งํ๋ค๊ฐ ์ง๋ฌธ๋๋ฆฌ๋๊ฒ์ด์๋๋ฐ ๋ถ์กฑํ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ์ด์ฌํํ๊ฒ ์ต๋๋ค!!(์ฌ์ง)๊ทธ๋ฆฌ๊ณ ํด๋น ์์ธ์ ์ฐพ์๊ฒ๊ฐ์ต๋๋ค. read์์๋ offset์ ReadOnlySpan s = new ReadOnlySpan(segment.Array,segment.Offset,segment.Count); ์ด๋ ๊ฒ offset์ ๋ฐ์ํ์ฌ segment๋ก ๋์ด์๋๋ฐ ์ ์ write์์๋ ArrayCopyํ ๋์ Offset์ ๋ํด์ฃผ์ง์๊ณ count๋ง ๋๊ฒจ์ฃผ์ด ๊ณ์ ์ฒซ 22๋ฐ์ดํธ์์ญ์ name๋ถ๋ถ์๋ง ๋ฃ๊ณ ์์๋๊ฒ๋๋ค. (๊ฐ์์์๋ offset์ ๋ํ์ง ์์์ฑ๋ก ์งํํ์ง๋ง, ๊ฐ์ฌ๋๊ป์๋ 5๋ฒ ๋ณด๋ด์ง์๊ณ ํ๋ฒ๋ง ๋ณด๋ด์ด ์ ๋์๋๊ฒ์ฒ๋ผ ๋ณด์๋ ๊ฒ ๊ฐ์ต๋๋ค.)์ ์ผ ์ดํด์๋์๋๊ฒ ๋ค๋ฅธ๊ฑด ๋ค ์๋์ค๋๋ฐ name๋ง ์ด์ํ๊ฒ ๋์ค๋ ์ด์ ์๋๋ฐ, ํด๋น name์ copyํด์ฃผ๋ array.copy์์ ์ ๋ ๊ฒ ํด์ฃผ์ด ์ฒซ ABCD๋ง ๋์ค๊ณ ๊ทธ ์ดํ์ ์ ์ด์ name byte๊ฐ ๋ค์ด์์ง์์ผ๋ ๋์ค์ง ์์๋๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ด๋ฐ ์ค์ ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํด์๋ ๋ค๋ฅธ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ด ํ์ํ ๊ฒ ๊ฐ์๋ฐ ์ด๋ป๊ฒํ ์ง๋ ์ ํ ์ง์์ด ์์ด์ ํ์ํ๊ฒ ๊ตฌ๋..๋ง ์๊ฐ์ด ๋๋ค์. ์ ๋ ๋ค๋ฅธ ์ผ์ํ๊ณ ์์ด์ ํด๋น ๊ฐ์๋ฅผ ๋ณํํ ์๊ฐ์ด ๋ณ๋ก ์์ด์๊ทธ๋ฐ์ง ๋นจ๋ฆฌ ํด๋น ๊ธฐ์ ์ ๋ฐฐ์ ์ผ์ ์ ์ฉ์์ผ์ผํ๋ ๊ธํ ๋ง์์ ๋ช์๊ฐ๋์ ๊ณ์ ์ฝ์งํด๋ณด๋ค ์ง๋ฌธ์ ๋๋ ธ์๋๋ฐ, ๊ฐ์ฌ๋์"์ด์ฐจํผ ํ์ ์ ๊ฐ๋๋ผ๋ ์ง๊ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ์๋ ๋ฌธ์ ๋ค์ด ๋ง ํฐ์ง๋๋ฐ๊ทธ ๋๋ ๋๊ตฐ๊ฐ ์์์ ๋์์ฃผ๊ณ ๋ต์ ์๋ ค์ฃผ๋ ์ฌ๋์ด ์์ง ์์ต๋๋ค."๊ฐ ๊ต์ฅํ ๋ง์์ ์ ๋ฟ์์ต๋๋ค. ๋ง์์ ์๊ธฐ๋ฉฐ ๋ ์ด์ฌํ ํด๋ณด๊ฒ ์ต๋๋ค. ์ข์๊ฐ์, ๋ต๋ณ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
- 2
- 4
- 528
Q&A
Name์ด ํ๋ฒ ์ค๋ฉด ์ด๊ธฐํ๋๋ ์ด์
์ ๋ ๋๋ฒ๊น ์ ํ๊ณ ์ถ์ง๋ง, ๋๋ฒ๊น ์ ํ๋ฉด client๋๋ server๋์ค ํ๋๋ง ๋๋ฒ๊น ์ด ๊ฐ๋ฅํด์ ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋๊ฒ์ ๋ํ ํ ์คํธ๊ฐ ์๋ฉ๋๋ค. ๊ทธ๋์ ๊ฐ์ฌ๋์ ์ด๋ป๊ฒ ๋ ํ๋ก๊ทธ๋จ์ ๋์์ ๋๋ฒ๊น ํ์๋์ง์ ๋ํด ์ง๋ฌธ์ ์ฌ๋ฆฐ์ ์ด ์์ต๋๋ค..ใ ๊ทธ๋์ ํ์ฌ ์์ธํ๊ฒ ๋๋ฒ๊น ์ ํ ์๊ฐ์์ด console writeline์ผ๋ก ํ์ธํด๋ณด๋ฉฐ ๊ฐ์ ์ฒดํฌ๋ฅผ ํ์์ง๋ง ์ฐพ์ง ๋ชปํ์ฌ ์ง๋ฌธ๋๋ ธ์ต๋๋ค. write()๋ฉ์๋๋ฅผ ์ดํ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๊ฟ๋ณด์์ ๋ ์ ๋๋๊ฒ์ผ๋ก ๋ณด์, write()์ string serializable๋ถ๋ถ์ฝ๋๊ฐ ์๋ชป๋ ๊ฒ ๊ฐ์๋ณด์ฌ์ ํด๋น ์ฝ๋ ์ฒจ๋ถ๋๋ฆฝ๋๋ค.. public override ArraySegment Write() { //์ด๋งํผ์ ๋ฒํผ๋ฅผ ์ผ๋จ ๊ฐ์ ธ์ด ArraySegment segment = SendBufferHelper.Open(4096); ushort count = 0; bool success = true; //์ฒ์์๋ง span์ผ๋ก ์ฐ์ด์ฃผ๊ณ ์ดํ์ slice Span s = new Span(segment.Array, segment.Offset, segment.Count); count += sizeof(ushort); success &= BitConverter.TryWriteBytes(s.Slice(count,s.Length-count), this.packetId); count += sizeof(ushort); success &= BitConverter.TryWriteBytes(s.Slice(count,s.Length-count), this.playerId); count += sizeof(long); //string serialize ushort nameLen = (ushort)Encoding.Unicode.GetByteCount(this.name); success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), nameLen); count += sizeof(ushort); // TryWriteBytes()์์ string, byte[]์ ์ธ์๋ก ๋ฐ๋ ๋ฉ์๋๊ฐ ์์ด์ ์ด๋ ๊ฒ ๊ตฌํ Array.Copy(Encoding.Unicode.GetBytes(this.name), 0, segment.Array, count, nameLen); count += nameLen; success &= BitConverter.TryWriteBytes(s, count); if (success == false) { return null; } //์ค์ ๋ก ์ฌ์ฉํ ๋ฐ์ดํฐ ๋ฒ์ ๊ฐ์ ธ์ด return SendBufferHelper.Close(count); }
- 2
- 4
- 528
Q&A
RegisterRecv()์์ args์ด๊ธฐํ ๊ตฌ๋ฌธ ์ฌ๋ผ์ง ์ด์
์.. AcceptSocket์ listener์์๋ง ์ฌ์ฉ๋๊ณ listener์์ session์ start์์ผ์ฃผ๋๊น session.Start(args.AcceptSocket);์ฌ๊ธฐ์ ์์ผ ๋๊ฒจ์ฃผ๊ณ session์ ํด๋น ์์ผ์ ๋ฐ์ผ๋ฉด ๋๋๊ฒ์ด๋ AcceptSocket์ ์์ฐ์ด๋๊ตฐ์. ๊ฐ์ฌํฉ๋๋ค.!!
- 0
- 3
- 461
Q&A
segmeng ๋ฒ์ ์ง์ ์์ ์ง๋ฌธ
๊ฐ์ฌํฉ๋๋ค. ๊ทผ๋ฐ ์ง๊ธ ํ์ฌ๊น์ง(SendBuffer ๊ฐ์)๋ offset์ด ์ ๋ถ 0์ธ๊ฒฝ์ฐ๋ก ๋ผ๊ณ ์๊ฐ์ด๋๋๋ฐ, ๋์ค์ offset์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋์ค๋๊ฒ์ธ๊ฐ์?
- 0
- 3
- 498
Q&A
segmeng ๋ฒ์ ์ง์ ์์ ์ง๋ฌธ
์ ๋ ๊ทธ offset์ ์ญํ ์ _readPos๊ฐ ์ด๋ฏธ ํด์ฃผ๊ณ ์๋ค๊ณ ๋๊ปด์ง๋๋ฐ, ์ด๋ป๊ฒ ๊ตฌ๋ถํด์ผ ์ดํด๋ฅผ ํ ์ ์๋๊ฒ์ธ๊ฐ์?
- 0
- 3
- 498
Q&A
RegisterRecv()์์ args์ด๊ธฐํ ๊ตฌ๋ฌธ ์ฌ๋ผ์ง ์ด์
๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด์ ๊ฐ์์์ args.AcceptSocket = null; ๋ฅผ ํด์ผ ์ ์ ์ฐ์ธ ์์ผ์ ๋ณด๋ค์ ์ ๋ฆฌํด์ฃผ์ด ์๋ฌ๊ฐ ๋์ง ์๋๋ค๊ณ ํ์ จ๋๋ฐ, Accept์ด๋ ๋ฌด๊ดํ Recv๋ผ์ ํ์์์ด์ก๋ค๋๊ฒ ๋ฌด์จ ์๋ฏธ์ธ์ง์??
- 0
- 3
- 461
Q&A
listener, connector static ์ฐจ์ด ์ด์
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. static void main์์์ฐ๊ธฐ ์ํด์ static listener๋ก ๋ง๋์ จ๋ค๋ ์๋ฏธ๋, static ๋ฉ์๋์์๋ static ์ธ์คํด์ค๋ง ์ฌ์ฉ๊ฐ๋ฅํ๊ฑด๊ฐ์????
- 0
- 2
- 449
Q&A
Session #2 ๋ด์ฉ์ค ์ ์ค๋ ๋๊ฐ ๋์๋ค๋ฐ์ ์ผ๋ก ์ ๊ทผ ๋ถ๊ฐ๋ฅํ์ง ์ง๋ฌธ
์๋ ์ฝ๋์ฒ๋ผ Session session = new Session(); ์ดํ์ ๊ทธ ํ ์ธ์ ์ session.Start๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ํํ๋ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ๋๋๊ฑด๊ฐ์?
- 0
- 4
- 630
Q&A
listener, session ๊ฐ์ ์ฐจ์ด
๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, listener๋ accept๋ฅผ ์คํจํ๋๋ผ๋ ๋ค๋ฅธ client๋ค์ ๊ณ์ ๊ธฐ๋ค๋ ค์ผ ํ๋๊น if, else์ ์๊ด์์ด ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ์ดํดํ๊ธด ํ๋๋ฐ, (๋ง๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค)session์ recv๋ฅผ ํ๋ฒ์ stream๋ค๋ง ๋ฐ๋๊ฑฐ๋๊น ๊ณ์ํด์ args.BytesTransferred > 0 ์ธ ๊ฒฝ์ฐ์๋ง ๊ณ์ํด์ RegisterRecv(args); ๋ก ๋์ฏ๋๋ฅผ ๋๋๊ฑธ๋ก ์ดํดํ๋๋ฐ ๋ง์๊น์?
- 0
- 3
- 622
Q&A
Session #2 ๋ด์ฉ์ค ์ ์ค๋ ๋๊ฐ ๋์๋ค๋ฐ์ ์ผ๋ก ์ ๊ทผ ๋ถ๊ฐ๋ฅํ์ง ์ง๋ฌธ
๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ด๋ ๊ฒ ๋์ผํ session์ startํ๊ฒ๋๋ค๋ฉด ๊ฐ์ OnRecvCompleted()๋ฉ์๋์ ์ง์ ํ๊ฒ๋๋ ๊ฒ ์๋๊ฐ์?
- 0
- 4
- 630