csharp 배열값 가져오기?? 질문드립니당

소켓 통신 실습하고 있는데
지금 구현하고 싶은 게 배열에 값들을 넣어서…

예를 들면

클라이언트에서 123을 보내면 서버에서는 456 이 뜨고 이런 식으로 만들어 보려고 하는데 어떻게 접근해야 할지 모르겠습니다.

배열에 값들을 저장해서 찾아야 하나 이렇게 생각도 드는데 접근 방법을 잘 몰라서 질문드립니다. ㅠㅠ

1개의 좋아요

질문의 요지를 알 수가 없어 효과적으로 답변드리기 힘듭니다.

C#에서는 TcpClientTcpListener를 이용해 TCP 소켓 통신을 할 수 있습니다. 또는 Socket을 바로 사용할 수 도 있습니다. TcpListenerTcpClientSocket을 좀 더 편하게 사용할 수 있도록 .NET에서 Socket을 이용해 좀 더 구현된 클래스입니다.

데이터는 문자열이던 숫자던 기타 다양한 데이터 형태던 최종적으로 바이너리로 전송됩니다. 그래서 최초 획득할 수 있는 데이터 유형은 byte[]이고요, 일반적으로 byte[]형을 바로 처리하지 않고 TcpClient에서 제공하는 GetStream() 메소드로 NetworkStream으로 처리하는데, 이것을 BinaryReader로 읽고 BinaryWriter로 네트워크 스트림에 쓰면 원하는 기본 데이터 유형으로 데이터를 주거니 받거니 할 수 있습니다.

위의 링크를 통해 관련 샘플을 살펴보시고, 그래도 잘 모르시겠으면 추가 질문 해주세요.

2개의 좋아요

질문에 대한 정보가 부족하기 때문에 부정확한 답변을 드릴 수 밖에 없습니다.

질문 내용 그 자체만 놓고 보면 클라이언트에서 new byte[] { (byte)'1', (byte)'2', (byte)'3', } 과 같은 데이터를 보냈을 때, 서버 측에서 저렇게 들어온 데이터를 읽어 화면에 "456"이라는 문자열을 표시하려고 하는데, byte[] 타입의 데이터를 어떻게 읽어서 비교해야 좋을지 잘 모르겠다는 의미로 파악됩니다.

구현 방법은 다양하겠습니다만, 보통은 클라이언트와 서버 사이에 프로토콜을 정하는 것이 순서입니다. 가장 간단한 예를 들어, 양쪽 모두 주고 받는 바이트 배열을 UTF-8 인코딩을 써서 텍스트로 변환한 다음 처리하는 것을 생각해볼 수 있습니다.

Socket.Receive Method (System.Net.Sockets) | Microsoft Docs

위의 문서에 나와있는 코드를 발췌해보면,

// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
    byte[] msg = Encoding.UTF8.GetBytes("This is a test");
    byte[] bytes = new byte[256];
    try
    {
        // Blocks until send returns.
        int i = server.Send(msg);
        Console.WriteLine("Sent {0} bytes.", i);

        // Get reply from the server.
        i = server.Receive(bytes);
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
    catch (SocketException e)
    {
        Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
        return (e.ErrorCode);
    }
    return 0;
}

256 바이트의 데이터를 서로 주고 받기로 약속한 상태에서, 들어온 바이트 배열 데이터를 Encoding.UTF8GetString 메서드를 사용하여 문자열로 변환하고 있습니다. 클라이언트가 "123"이라는 문자열을 UTF8 인코딩으로 제대로 보냈다면, 받을 때에도 "123"이라는 문자열을 볼 수 있어야 할 것입니다. 그 외에는 오류로 처리가 되어야겠죠.

네트워크 프로그래밍에서 중요한 부분이 바로 이 부분인데, 단순히 어떻게 코딩할 것인가 하는 방법 말고 프로토콜 규약을 정의하는 것이 필요합니다.

여기에 더해, 굳이 프로토콜을 새로 써내려가야 할 이유가 없다면 요즈음은 HTTP 프로토콜을 이용하는 웹 API를 설계하는 것이 여러모로 시간 절약에 도움이 됩니다.

3개의 좋아요

byte 배열을 쉽게 처리하시려면, BitConverter 클래스 (System) | Microsoft Learn 추천드립니다.

2개의 좋아요

답글이 늦었습니다. 다시 정리 해서 올리겠습니다 죄송합니다 모라자서 그렇습니다 이해해주세요 ㅠㅠ

1개의 좋아요

이제 댓글을 봤습니다. 답글 감사합니다.제가 질문의 요지를 제대로 못올린거 같습니다 정말죄송합니다 모자라서 그렇습니다 ㅠㅠ 다시 정리해서 다시올리겠습니다!! 댓글감사합니다.

1개의 좋아요

이제 댓글을 봤습니다. 답변 감사합니다 한번 시도해보겠습니다 감사합니다

1개의 좋아요