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

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

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

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

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

socket.discconet();

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

1 Like

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

두가지 방법이 있습니다.

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

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

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

2 Likes

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

1 Like

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

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

2 Likes

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

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

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

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

3 Likes

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

3 Likes