c sharp 1개의창 2개 실행 동시종료 질문 드립니다.

윈폼으로 소켓통신 프로그램 만들기를 해보고있는 초보자 입니다.

윈폼 1개는 visual studio에서 시작 눌러 실행 시키고 하나는 저장되어있는 폴더에 exe 파일로 똑같은 프로그램을 1개 더 실행 시켜서 총 2개를 실행시킵니다.

여기서 한개의 창에서 종료버튼을 누르면 2개다 동시에 닫히는게 가능한가요??

그리고 소켓통신 연결 끊기를

socket.discconet();

로 연결을 끊는데 이러면 2개창에서 동시에 끊어지게 가능합니까?? 가능한지도 궁금하고 된다면 힌트좀 주세요 ㅠㅠ

1개의 좋아요

첫번째 질문의 간단한 답은 당연히 가능합니다. 물론, 자동으로 그렇게 되진 않으니까 어떤 목적으로 그렇게 동작하게 하려는지 부연 설명은 필요할 것 같습니다.

두가지 방법이 있습니다.

  • 서버 또는 클라이언트의 연결 끊김을 감지해서 프로그램을 종료
  • 종료 패킷을 전송하여 종료 패킷을 수신 받으면 종료

두번째 질문의 답은 TCP의 경우 한쪽에서 연결을 끊으면 다른 쪽도 연결이 끊깁니다. (네트워크의 문제로 안 끊어질 수도 있는데 이 상황은 예외 상황입니다)

깃허브등으로 실행되는 코드를 공유 주심은 어떠세요?

2개의 좋아요

깃허브를 사용해본적이 아직 없습니다 ㅠㅠ
코드 전체를 여기에 올리는건 안될까요???

1개의 좋아요

실행되는 프로젝트 파일을 OneDrive 등에 올리시고 공유 주소를 공유 주셔도 됩니다 ^^

이번 기회에 깃허브를 사용해보시는건 어떠세요? 회사나 여러 평가 기준에 깃허브 활동을 높게 반영하거든요.

2개의 좋아요

네 한번 해보겠습니다. 감사합니다 이렇게 하나씩 성장하는거겠죠?? 항상 감사합니다^^*

2개의 좋아요
1개의 좋아요
  1. 소스코드를 대략 살펴봤는데, 서버의 “DISCONNECT” 에 리스너 소켓을 Disconnect() 호출하셨는데요, 이것은 잘못된 코드 입니다. 리스너에 의해 연결된 Socket을 닫으셔야 하고요, 소스코드에서는 클래스에서 별도의 연결 소켓을 가지고 있지 않는데 이를 클래스 필드로 저장해뒀다가, 닫을 때 리스너 소켓이 아닌 이 연결 소켓을 닫아주셔야 합니다.

  2. 클라이언트나 서버에서 서로 BeginReceive()으로 수신을 대기하고 있으므로, 연결이 끊겼을 때 이를 이곳에서 감지합니다. 감지된 것으로 종료 처리를 진행할 수 있습니다.

문제가 해결되었다면 포럼의 다른 분들을 위해 시행착오를 정리해서 댓글로 적어주시면 감사할께요. 그래야 계속되는 질문과 답변의 선순환이 이루어진다고 생각합니다.

3개의 좋아요

네 해서 성공시켜서 올리겠습니다 감사합니다.!!

3개의 좋아요