Microsoft MVP성태의 닷넷 이야기
C# 윈폼 TCP/IP 데이터 연속으로 보낼때 [링크 복사], [링크+제목 복사],
조회: 14644
글쓴 사람
김준희
홈페이지
첨부 파일
 

윈폼을 활용하여 버튼 클릭할때마다 데이터를 보낼려고 합니다.
아래와 같이 클라이언트 쪽 코드를 작성했는데 처음 한번은 데이터가 보내지는데 그다음 버튼을 클릭할때는 데이터가 전송이 안됩니다.
서버 쪽에서 데이터없다고 소켓을 닫지도 않습니다.

1. 클라이언트 코드 c#

void Onmode_Send()
        {
            var json = new JObject();
            json.Add("MODE", "ON");
            string json_text = json.ToString();
            
            try
            {
                byte[] Buffer = Encoding.UTF8.GetBytes(json_text);
                concheck_text.Text = json_text;
                Client_Socket.Send(Buffer);
                
            }
            catch (Exception ex)
            {
                concheck_text.Text = "연결 끊김";

                Connected = false;
                Client_Socket.Close();
            }

            json.Remove("MODE");

        }
        void Offmode_Send()
        {
            var json = new JObject();
            json.Add("MODE", "OFF");
            string json_text = json.ToString();

            try
            {
                byte[] Buffer = Encoding.UTF8.GetBytes(json_text);
                concheck_text.Text = json_text;
                Client_Socket.Send(Buffer);
            }
            catch (Exception ex)
            {
                concheck_text.Text = "연결 끊김";

                Connected = false;
                Client_Socket.Close();
            }
            json.Remove("MODE");
        }

2. 서버 코드 파이썬

while True:
        client_socket, client_addr = server_socket.accept() # 수신대기, 접속한 클라이언트 정보 (소켓, 주소) 반환
        msg = client_socket.recv(SIZE) # 클라이언트가 보낸 메시지 반환
        # 빈 문자열 수신시 중지 **********해당 부분에서 break 안걸림 *************
        if not msg:
            break
                              
        print("[{}] message : {}".format(client_addr,msg)) # 클라이언트가 보낸 메시지 출력
        








[최초 등록일: ]
[최종 수정일: 12/16/2021]


비밀번호

댓글 작성자
 



2021-12-16 01시53분
음... 혹시 아래의 질문을 했다는 것을 잊으신 건가요? ^^;

C# TCP/IP 통신시 연결 끊김 에러
; https://www.sysnet.pe.kr/3/0/5582

이번 질문의 원인도 그때와 맥락은 별반 다르지 않습니다.

서버 측에서 accept, 1번 수신, accept,...를 반복하기 때문에 클라이언트에서 connect, send, send,...를 하면 두 번째 send부터 동작을 하지 않는 것이 맞습니다.

원하는 대로 클라이언트에 맞춰 동작을 시키려면, 서버에서 accept를 한 소켓을 재사용해서 recv, recv,...가 호출되도록 바꿔야 합니다. 가령 이런 식으로 해야 합니다.

while True:
  client_socket, client_addr = server_socket.accept()
  
  while True:
    msg = client_socket.recv(SIZE)
    if not msg:
      break

물론, 저런 식으로 구현하면 먼저 연결한 클라이언트를 처리하는 내부 while 루프가 종료하지 않는 한 후속 클라이언트의 연결이 안 되므로, 보통은 두 번째 while은 스레드 처리하거나, 리눅스의 경우 fork를 해서 진행합니다.
  
혹시 뭔가 이해가 안 되시는 부분이 있으면, 그 부분을 다시 구체적으로 어떻게 이해가 안 되는지 질문을 주세요.

아무래도 제 예상으로는 소켓 통신에 대한 공부를 먼저 하루 정도라도 시간을 갖고 보시는 것이 좋을 듯합니다. (제 책을 가지고 계시다면 "6.7 네트워크 통신" 절을 보시면 도움이 되실 것입니다.)
정성태

... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5494지예예지5/13/202115859비동기 코드 흐름이 궁금합니다! [2]
5493xing...5/6/202113598xing api XQCSPAT00600 질문입니다 [4]파일 다운로드1
5492한예지 donator5/5/202113669FromCurrentSynchronizationContext 관련 코드 질문있습니다! [2]
5491조우성5/4/202119334WinForm과 WPF의 성능차이 비교한 자료가 있을까요? [4]
5490한예지 donator5/3/202115281UI 스레드의 Invoke 질문있습니다. [4]
5489저누4/28/202115594시작하세요 C# 9.0, 225페이지 구조체 관련 질문드립니다. [2]
5488종범4/27/202115630C# 비동기 함수 async, await 와 Task의 관계에 대해 질문 드립니다. [6]
5487진우4/27/202114692C# 엑셀 자동화 성능 향상 문의 [2]
5486지나가던...4/26/202115161닷넷 구현 코드 관련 질문 [2]
5485이재원4/17/202115513교재 315페이지 내용 질문 [3]
5484Syong4/16/202119461윈폼 기반의 응용프로그램 dll 참조와 32,64bit 빌드 관련 문의 [4]
5483한예지 donator4/15/202114367익명 형식과 var 관계 질문 있습니다. [2]
5482질문4/13/202116084WPF를 위한 MVVM toolkit 선택과 관련한 문의드립니다. [4]
5480한예지 donator4/5/202117401GetHashCode 질문있습니다! [2]
5479한예지 donator4/4/202116012Equals를 닷넷에서 어떻게 구현했는지 보고 싶을 떄는 어떻게 해야 될까요? [2]
5478갑자기C#3/23/202119187C# Winform에서 TextBox없이 입력 받을 수 있나요? [7]
5477달팽이3/18/202115140c# 도형을 그린후 편집하는 방법이 궁금합니다. [2]파일 다운로드1
5475dimo...3/2/202115658POH가 .NET 5에 추가된 것으로 알고 있습니다. POH가 유용한 경우는 어떤 경우가 있을까요? [1]
5474Syong2/26/202115477사용자 지정 컨트롤 생성시 Invalidate, Update, Refresh의 차이점 [2]
5473한예지 donator2/25/202114438디자인 타임이 뭔지 궁금합니다!! [5]
5472dimo...2/24/202116692등록하지 않고 ocx를 사용하는 `키움`관련 포스팅을 따라가다 질문드립니다. [9]
5471남산2/21/202114095MarshalDirectiveException 에 대한 질문입니다. [1]
5470한예지 donator2/7/202114139yield 질문있습니다!! [2]
5469유호성2/6/202113939Parallel + Task.Run 동시 실행 환경에서 간헐적으로 Task.Run()에서 null이 리턴됩니다. [3]파일 다운로드1
5467hero...2/4/202114555실행 환경에 따른 Thread.Sleep 딜레이 차이 질문 [8]
5466pr1/29/202114428c# winform load시 작업표시줄에 뜨지 않는 현상을 겪으신적이 있으신가요? [4]파일 다운로드1
... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...