2016-06-21 3 views
3

데이터를 전송하는 데 tcp를 사용하고 있습니다. 서버 코드는 C로 작성되고 클라이언트 코드는 nodejs에 의해 작성됩니다. 하나의 버퍼를 보낼 때 클라이언트가이 버퍼의 두 부분을 수신하는 경우가 있지만 console.log 함수는 두 번 트리거되지만 때로는 제대로 작동합니다. 다음은 nodejs 코드 및 C 코드입니다. nodejs 번호 :C에서 수신 한 nodejs의 버퍼를 두 부분으로 나눕니다.

var client = new net.Socket(); 
client.on('data', function(data) { 
    console.log('data:', data) 
}); 

C 코드 :

send(socket_file, buffer, strlen(buffer),0) 
+0

노드에서 스트림이 작동하는 방식입니다. 여러 개의 '데이터'이벤트 (여러 가지 다른 이벤트)를 트리거 할 수 있습니다. 서버가 보낸 전체 메시지를 어셈블해야하는 경우 내부 정리 작업을 수행해야 할 수 있습니다. – robertklep

+0

@robertklep 고마워요! – fiona

답변

2

이 스트림 지향 (반대로 UDP와 같은 패킷 - 지향) 프로토콜을 모든 후 TCP 대한 전형적인 .

네트워크에 대한 쓰기가 하나의 읽기와 같고 여러 개의 쓰기가 함께 전달 될 수 있으며 단일 쓰기가 분할 될 수 있다고 보장 할 수 없습니다.

응용 프로그램 수준 메시지 프로토콜을 추가해야합니다.

관련 문제