2012-02-24 2 views
1

저장 가능한 nfreeze로 얻은 소켓을 통해 스칼라 값을 보내려고합니다. 단계별로 단계 :UDP를 통해 데이터 패키지 보내기

  1. 나는이 잘 작동 $serializedHash = nfreeze \%hash;
  2. 내가 소켓 $sendSocket->send($serializedHash);

에 그것을 보낼 스칼라을 얻을만큼 스칼라 이 1024byte보다 더 아니므로. 왜냐하면 나는 상대방에게 최대로만 데이터를받을 수있는 소켓을 가지고 있기 때문이다. 길이는 1024byte입니다. 또한 파일에 을 저장하고 sysreadsyswrite으로 처리 할 수 ​​없습니다.

내가 원하지 않는 것은 소켓 당 매 줄마다 하나씩 보내는 것입니다. 해시는 2 백만 개가 넘습니다. 해시 요소는 \n으로 구분되어 있으므로 split 함수로 시도했지만 2 백만 개의 항목이있는 배열이 있습니다.

UDP 소켓을 통해 패키지로 데이터를 보내려면 어떻게해야합니까?

+0

왜 UDP를? 정말 그 일에 달려 있지 않습니다. (자세한 내용은 raina77ow의 대답을 참조하십시오.) – ikegami

답변

3

당신은 아마도 그와 같은 덩어리하여 직렬화 된 해시를 처리 할 수 ​​있습니다

while ($serializedHash =~ /(.{1,1024})/sg) { 
    my $chunk = $1; 
    # sending $chunk 
} 
+0

설명해주십시오. – Mijat

+0

큰 문자열을 작은 부분으로 나눈 다음 하나씩 UDP를 통해 보내야합니다. 내가 제안한 것은 실제로 꽤 일반적인 해결책이다. while ($ string = ~/$ pattern/g) 루프. $ 패턴은 이전에 끝난 위치에서 시작할 때마다 문자열에 반복해서 매치됩니다. 기본적으로 욕심이 많으므로 1024 개의 기호 또는 나머지는 캡처합니다. – raina77ow

+0

여기에 잠재적 인 버그가 있습니다. 문자가 아닌 바이트를 처리해야하기 때문에 'use bytes'지시어를 사용해야합니다. – raina77ow

관련 문제