게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C# 소켓 통신 질문
게시물ID : programmer_15178짧은주소 복사하기
작성자 : 카퀴카퀴
추천 : 0
조회수 : 1796회
댓글수 : 4개
등록시간 : 2015/12/26 22:53:02
옵션
  • 본인삭제금지
안녕하세요 C#의 맛을 조금 본 학생입니다. 맨날 콘솔창만 보다가 GUI를 보니까 더 재미있게 하고있습니다.
 
혼자 캐치마인드라는 게임을 만들려고 소켓 통신에 대해서 이것저것 찾아보면서 만들고 있었는데 !!
 
신기하게도 되다가 안되다가를 반복합니다..
 
////////////////////////////////////////
프로그램 방식
 
1. 클라이언트 프로그램에서 mouseMove 이벤트가 발생하면 해당 좌표를 서버에 보낸다.
 
2. 받은 좌표를 다른 클라이언트들에게 다 보냄
 
3. 좌표를 받은 클라이언트들은 패널에 대해서 invalidate를 호출해서 추가된 좌표도 다시 그려줌.
 
4. 위의 동작을 반복
 
////////////////////////////////////////
 
예를 들면 User 한명이 서버에 접속해있는 상태에서 접속을 해서 연결을 시도하면 접속과 동시에 퇴장이 발생합니다.
 
StreamWriter 에 대해서 Flush() 함수를 호출해주거나 AutoFlush 속성을 true로 변경해줬지만 동일한 현상이 발생합니다.
 
신기하게도 어쩔땐 다 연결이 잘 되고 어쩔땐 연결이 안되고.. 왜 이런걸까요 ..
 
 
아래는 소스코드입니다.
 
/////////// User //////////
 
       // mouse move 이벤트
        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isClicked && user.Connected)
            {
                sw.WriteLine(e.X + "," + e.Y);
                sw.Flush();
            }
        }
       // 스레드에 의해 실행되는 receive 함수
        private void receive()
        {
            while (isOn == true)
            {
                try
                {
                    string message = sr.ReadLine(); // sr은 streamReader
                    if (message != null)
                    {
                        string[] point = message.Split(',');
                        points.Add(new Point(Convert.ToInt32(point[0]), Convert.ToInt32(point[1])));
                        pnl_drawBoard.Invalidate();
                    }
                    if (user.Connected == false)
                        isOn = false;
                }
                catch
                {
                    isOn = false;
                }
            }
            // 자기마음대로 아래 if문으로 내려와요 ㅠㅠ
            // user는 Socket
            if (user.Connected)
            {
                ns.Close();
                sr.Close();
                sw.Close();
                user.Close();
            }            
            MessageBox.Show("접속 종료");
        }
 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호