c# 문법배우면서 웹소켓채팅 소스 구해서 살펴보고있는중입니다<br>서버쪽에서 소켓으로 데이타를 받아서 처리하는코드인데<br>이해하기가 어려워서 가르침부탁합니다<br><br>클라이언트에서는 그냥 입력된텍스트를 전송할뿐인데<br>서버에서는 텍스트로 처리하면될것같은데 <br>비트연산도하고 왜 이렇게 어렵게 처리하는지<br>코드가 어떤의미인지 주석좀 부탁합니다<br><br>뭔지 모르지만 이해해보고싶은 코딩이라서...<br><br>public WebSocketFrame Read(NetworkStream stream)<br> {<br> // read the first byte. If the connection has been terminated abnormally then this would return an FF and we should exit<br> byte byte1 = (byte)stream.ReadByte();<br><br> // this condition will happen if the connection has terminated unexpectedly<br> if (!stream.DataAvailable && byte1 == 0xFF)<br> {<br> return new WebSocketFrame(true, WebSocketOpCode.ConnectionClose, new byte[0], false);<br> }<br><br> // process first byte<br> byte finBitFlag = 0x80;<br> byte opCodeFlag = 0x0F;<br> bool isFinBitSet = (byte1 & finBitFlag) == finBitFlag;<br> WebSocketOpCode opCode = (WebSocketOpCode)(byte1 & opCodeFlag);<br><br> // read and process second byte<br> byte byte2 = (byte)stream.ReadByte();<br> byte maskFlag = 0x80;<br> bool isMaskBitSet = (byte2 & maskFlag) == maskFlag;<br> uint len = ReadLength(byte2, stream);<br> byte[] decodedPayload;<br><br> // use the masking key to decode the data if needed<br> if (isMaskBitSet)<br> {<br> const int maskKeyLen = 4;<br> byte[] maskKey = BinaryReaderWriter.ReadExactly(maskKeyLen, stream);<br> byte[] encodedPayload = BinaryReaderWriter.ReadExactly((int)len, stream);<br> decodedPayload = new byte[len];<br><br> // apply the mask key<br> for (int i = 0; i < encodedPayload.Length; i++)<br> {<br> decodedPayload[i] = (Byte)(encodedPayload[i] ^ maskKey[i % maskKeyLen]);<br> }<br> }<br> else<br> {<br> decodedPayload = BinaryReaderWriter.ReadExactly((int)len, stream);<br> }<br><br> WebSocketFrame frame = new WebSocketFrame(isFinBitSet, opCode, decodedPayload, true);<br> return frame;<br> }<br>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.