선택 및 UDP 프로토콜이 결합 된 경우 데이터를 수신 할 수 없습니다.

Lw Cui

UDP 클라이언트의 원래 코드는 다음과 같습니다.

while (getline(cin, buf)) {
        // c.getConnd() return connected fd
        write(c.getConnfd(), buf.c_str(), buf.size());
        memset(cbuf, 0, sizeof(cbuf));
        read(c.getConnfd(), cbuf, 1024);
        LOG(DEBUG) << "read message: " << cbuf;
    }

제대로 작동하므로 서버 (recvfrom 및 sendto 사용)도 소켓 바인딩도이 문제를 일으키지 않습니다.

IO 멀티 플렉스를 배우기 위해 IOMultiplexingUtility사용자가 fd를 각각의 호출 가능한 객체와 결합 할 수있는 라는 클래스를 작성 합니다. 그것들을 설정 한 후에는 무한 루프로 들어갑니다 (읽을 수있는 fd를 찾으십시오-조치를 취하십시오-다시 기다리십시오).

class IOMultiplexingUtility {
public:
    IOMultiplexingUtility() {
        FD_ZERO(&socketSet);
    }

    void addFd(int fd, std::function<void(int)> action) {
        maxfd = fd + 1;
        FD_SET(fd, &socketSet);
        fdVec[fd] = action;
    }

    void start() {
        auto readySet = socketSet;
        select(maxfd + 1, &readySet, NULL, NULL, NULL);
        for (auto &pair: fdVec)
            if (FD_ISSET(pair.first, &readySet)) {
                if (pair.second != nullptr)pair.second(pair.first);
                else if (defaultAction) defaultAction(pair.first);
            }
    }

private:
    fd_set socketSet;
    int maxfd;
    std::unordered_map<int, std::function<void(int)>> fdVec;
};

다음과 같이 수정 된 UDP 클라이언트 코드 :

io.addFd(c.getConnfd(), [&c](int)mutable -> void {
    char cbuf[1024];
    memset(cbuf, 0, sizeof(cbuf));
    read(c.getConnfd(), cbuf, 1024);
    cout << cbuf << endl;
});

io.addFd(fileno(stdin), [&c](int)mutable -> void {
    string buf;
    getline(cin, buf);
    write(c.getConnfd(), buf.c_str(), buf.size());
});

while (true) io.start();

버그가 발생하여 (텍스트 입력, 서버 수신 및 전송이 성공적으로 이루어졌지만 cbuf출력되지 않음) 해결 방법을 찾을 수 없습니다. 어떤 아이디어라도 감사합니다.

유키

.NET의 논리 결함처럼 보입니다 addFd. 생성자에서 maxfd = std::max(fd, maxfd)같이 초기화 maxfd뿐만 아니라와 같은 형식이어야합니다 INT_MIN.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

OrientDB : 연결된 문서에서 데이터를 선택할 수 없습니다.

데이터베이스에 저장된 경로가있는 이미지를 선택할 수 없습니다.

UDP 프로토콜 및 readDatagram으로 데이터 수신

신속한 질문: 프로토콜 유형인 경우 if else 블록에서 선택적이 아닌 변수를 어떻게 초기화할 수 있습니까?

UDP 서버 소켓은 수신 된 모든 데이터를 구문 분석 할 수 없습니다.

데이터 흐름에서 Oracle 연결된 서비스에 대한 싱크를 선택할 수 없습니다.

오래된 데이터를 선택 해제할 수 없습니다.

Access Linked Table Manager가 없습니다. 연결된 데이터베이스를 변경할 수 없습니다.

제공된 파이프는 해결된 데이터를 라우팅할 수 없습니다.

PDO로 데이터를 선택할 수 없습니다.

SQL : 데이터베이스를 선택할 수 없습니다.

유선 이더넷 컴퓨터가 연결된 경우 Wi-Fi 장치를 라우터에 연결할 수 없습니다.

VBA를 사용하여 자동 필터링된 테이블 데이터를 선택할 수 없습니다.

프로토콜에 연결된 유형이 있으면 프로토콜 유형의 속성을 사용할 수 없습니다.

선택한 경우 드롭 다운은 PDF를로드 할 수 없습니다

조인 된 다른 테이블에서 데이터를 선택할 수 없습니다.

Firebase의 JSON에서 파싱 된 데이터를 표시합니다. 선택적 문자열 인쇄를 제거 할 수 없습니다.

Eloquent 및 SQL Server 데이터베이스를 사용하여 Laravel에서 선택할 수 없습니다.

BehaviourSubject를 통해 수신된 데이터를 렌더링할 수 없습니다.

프로세스가 수신 중이지만 UDP 포트에 연결할 수 없습니다.

MySQL에서 최신 데이터와 동일하지 않은 데이터를 선택할 수 없습니다.

그룹화 된 최신 및 가장 오래된 행의 데이터를 병합 할 수 있습니까?

TLS 레코드 프로토콜은 수신 된 데이터를 어떻게 재 조립합니까?

신속한 프로토콜을 사용하여 데이터를 전달할 수 없습니다

데이터가 다른 테이블에없는 경우 데이터를 어떻게 선택할 수 있습니까?

NAT를 통한 UDP 클라이언트는 서버에서 데이터를 수신 할 수 없습니다.

데이터 프레임 열을 선택할 수 없습니다.

Akka, Udp 전송이 "요청 된 주소를 할당 할 수 없습니다"와 함께 실패합니다.

통합 문서에 피벗 테이블이 포함 된 경우 데이터를 추가 한 후 Excel 시트를 저장할 수 없습니다.

TOP 리스트

  1. 1

    셀레늄의 모델 대화 상자에서 텍스트를 추출하는 방법은 무엇입니까?

  2. 2

    Blazor 0.9.0 및 ASP.NET Core 3 미리보기 4를 사용한 JWT 인증

  3. 3

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  4. 4

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  5. 5

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  6. 6

    오류 : MSB4803 : MSBuild의 .NET Core 버전에서 "ResolveComReference"작업이 지원되지 않습니다.

  7. 7

    R에서 Excel로 내보낼 때 CET / CEST 시간 이동이 삭제됨

  8. 8

    node.js + postgres : "$ 1"또는 그 근처에서 구문 오류

  9. 9

    확대 후 하이 차트에서 Y 축이 잘못 정렬 됨

  10. 10

    EPPlus에서 행 높이를 설정할 때 이상한 동작

  11. 11

    Ionic 2 로더가 적시에 표시되지 않음

  12. 12

    MS Access 부분 일치 2 테이블

  13. 13

    EPPlus에서 병합 된 셀의 행 높이 자동 맞춤

  14. 14

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  15. 15

    ResponseEntity를 사용하고 InputStream이 닫히는 지 확인하는 적절한 스트리밍 방법

  16. 16

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  17. 17

    오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

  18. 18

    Java에서 이미지를 2 색으로 변환

  19. 19

    overflow-y를 사용할 때 스크롤 버벅 거림 줄이기 : scroll;

  20. 20

    Java에서 Apache POI를 사용하여 테이블 크기 및 간격을 단어로 설정하는 방법

  21. 21

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

뜨겁다태그

보관