다시써보는 에코클라이언트 Linux 버전

2024. 6. 1. 21:47·C++/네트워크
#include <iostream>
#include <string>
#include <array>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/tcp.h>

// linux version

int main()
{
    int sock = 0;
    sockaddr_in server_addr = {
        .sin_family = AF_INET,
        .sin_port = htons(8888),
    };
    std::array<char, 1024> buffer{};
    std::string message = "Hello, Server!";

    // 소켓 생성
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        std::cerr << "Socket creation error" << std::endl;
        return -1;
    }

    // 소켓 옵션 변경 (noDelay)
    int nOpt = 1;
    ::setsockopt(sock,
                 IPPROTO_TCP, TCP_NODELAY,
                 reinterpret_cast<char *>(&nOpt),
                 sizeof(nOpt));

    // 서버 IP 주소 설정
    if (inet_pton(AF_INET, "192.168.35.154", &server_addr.sin_addr) <= 0)
    {
        std::cerr << "Invalid address/ Address not supported" << std::endl;
        return -1;
    }

    // 서버에 연결
    if (connect(sock, reinterpret_cast<sockaddr *>(&server_addr), sizeof(server_addr)) < 0)
    {
        std::cerr << "Connection Failed" << std::endl;
        return -1;
    }

    while (true)
    {
        std::cin >> message;
        if (message == "EXIT")
            break;

        send(sock, message.c_str(), message.length(), 0);
        std::cout << "Message sent: " << message << std::endl;

        int readSize;
        while ((readSize = read(sock, buffer.data(), buffer.size())))
        {
            if (readSize > 0)
                std::cout << "Server response: " << std::string(buffer.data(), readSize) << std::endl;
        }
    }
    // 서버로부터 응답 수신
    // 소켓 닫기
    close(sock);
    return 0;
}

'C++ > 네트워크' 카테고리의 다른 글

윈도우 소켓 깔끔하게 작성해보기  (0) 2025.03.11
다시써보는 에코서버2 window 버전  (1) 2024.06.02
다시 써보는 에코서버 window 버전  (0) 2024.06.01
'C++/네트워크' 카테고리의 다른 글
  • 윈도우 소켓 깔끔하게 작성해보기
  • 다시써보는 에코서버2 window 버전
  • 다시 써보는 에코서버 window 버전
교쟁이
교쟁이
  • 교쟁이
    Just Do it!!!
    교쟁이
  • 전체
    오늘
    어제
    • 분류 전체보기 (28) N
      • C++ (1) N
        • 자료구조 (0)
        • CMake (0)
        • 기초 (2)
        • 네트워크 (4)
      • 항해99 (15)
        • WIL (4)
      • Back-end (3)
        • DATABASE (3)
      • 글쓰기 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해 플러스 #테라폼
    database
    TCP/IP
    네카라쿠배
    항해 플러스 # CI/CD #Terraform
    programming
    스타트업
    자바스크립트
    테스트
    항해 플러스
    개발자
    신입개발자
    socket
    항해99 #nodejs
    sql #database
    Jest
    동생
    비전공자
    항해99
    코드스테이츠
    부트캠프
    파이널 프로젝트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
교쟁이
다시써보는 에코클라이언트 Linux 버전
상단으로

티스토리툴바