[ Program ]/C#
C# 네트워크
관이119
2012. 9. 17. 15:26
출처 : 영진닷컴, C# .NET 프로그래밍 실전프로젝트
// 데이터 전송 private void SendData(byte[] data) { try { int total = 0; int size = data.Length; int left_data = size ; int send_data = 0; // 전송할 실제 데이터의 크기 전달 byte [] data_size =new byte[4]; data_size = BitConverter.GetBytes(size); send_data = this.client.Send(data_size); // 실제 데이터 전송 while(total < size) { send_data = this.client.Send(data, total, left_data, SocketFlags.None); total += send_data; left_data -= send_data; } } catch(Exception ex) { MessageBox.Show(ex.Message); } } // 데이터 수신 private byte[] ReceiveData() { try { int total = 0; int size = 0; int left_data = 0; int recv_data = 0; // 수신할 데이터 크기 알아내기 byte[] data_size = new byte[4]; recv_data = this.client.Receive(data_size, 0, 4, SocketFlags.None); size = BitConverter.ToInt32(data_size, 0); left_data = size ; byte [] data = new byte[size]; // 서버에서 전송한 실제 데이터 수신 while(total < size) { recv_data = this.client.Receive(data, total, left_data, 0); if(recv_data == 0) break; total += recv_data ; left_data -= recv_data; } return data; } catch(Exception ex) { MessageBox.Show(ex.Message); return null; } }위의 소스처럼 먼저 전송할 데이터의 크기를 알려준다.read, write 함수를 (C에서) 사용할때 늘 버퍼의 크기를 전달해 줬었다. 같은 맥락이다.아쉽게도 만들때 없어서..( 나중에 안거지만 byte형으로 어케 넘기는 녀석이 있다. C에서 쓰던 read/write랑 비슷하더라. )책에선 이방법을 권장하고 있다. 테스트 결과 잘돌아 간다.다만.. 단점이 있다면 좀 귀찮다. 이래저래 쓸것도 많고.., 뒤에 나올 스트림을 이용해보자.문자열은 정말 쉽게 보내고 받고 한다. 그러나, 문자열 이외의 것을 이용할때는 그냥.., Socket을 이용하도록 하자.그게 확장성 면에서 더 나은 결과를 가져올것이다.위의 소스처럼 먼저 전송할 데이터의 크기를 알려준다.read, write 함수를 (C에서) 사용할때 늘 버퍼의 크기를 전달해 줬었다. 같은 맥락이다.아쉽게도 만들때 없어서..( 나중에 안거지만 byte형으로 어케 넘기는 녀석이 있다. C에서 쓰던 read/write랑 비슷하더라. )책에선 이방법을 권장하고 있다. 테스트 결과 잘돌아 간다.다만.. 단점이 있다면 좀 귀찮다. 이래저래 쓸것도 많고.., 뒤에 나올 스트림을 이용해보자.문자열은 정말 쉽게 보내고 받고 한다. 그러나, 문자열 이외의 것을 이용할때는 그냥.., Socket을 이용하도록 하자.그게 확장성 면에서 더 나은 결과를 가져올것이다.