출처 : 영진닷컴, 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을 이용하도록 하자.
그게 확장성 면에서 더 나은 결과를 가져올것이다.
댓글