Beispiel #1
0
 /// <summary>
 /// 방정보를 입력받아 해당 닉네임의 사용자의 메시지를 전달
 /// </summary>
 /// <param name="msg">전달될 메시지</param>
 /// <param name="chattingElement">해당 메시지가 전달될 방정보</param>
 /// <param name="clientNickName">대화메시지를 보낸 클라이언트 닉네임</param>
 /// <param name="isServerMsg">true:서버 메시지 /false:일반 대화 메시지</param>
 public static void Multicast(string msg, string clientNickName, ChattingElement chattingElement, bool isServerMsg)
 {
     //throw new NotImplementedException();//지금 구현 부분 아니면 남겨둔다!!
     foreach (DictionaryEntry item in clientList)
     {
         if (chattingElement.NicNames.Contains((string)item.Key))//해당닉네임이 방정보에 추가되어있는 것만 tcp연결하여 메시지를 전송시킴
         {
             TcpClient tcp = (TcpClient)item.Value;
             if (tcp.Connected)
             {
                 NetworkStream ns      = tcp.GetStream();
                 byte[]        bytemsg = new byte[tcp.ReceiveBufferSize];
                 if (!isServerMsg && item.Key.ToString() != clientNickName)//클라이언트가 보낸 메시지일때
                 {
                     string date = "보낸시간:" + DateTime.Now + "\n";
                     chattingElement.MessageBody += date + clientNickName + "님의 메시지:" + msg + "\n";
                     bytemsg = Encoding.UTF8.GetBytes("방명:" + chattingElement.RoomName + ">>>>" + clientNickName + "님의 메시지:" + msg);//메시지를 바이트배열로 저장
                 }
                 else//서버가 보낸  메시지 일때
                 {
                     bytemsg = Encoding.UTF8.GetBytes("서버 메시지:" + msg + " 현재방 접속 인원:" + chattingElement.NicNames + "::");
                 }
                 ns.Write(bytemsg, 0, bytemsg.Length);
                 ns.Flush();
             }
         }
     }
 }
Beispiel #2
0
 public static string GetMember(ChattingElement chattingElement)
 {
     return(chattingElement.NicNames);
 }
Beispiel #3
0
        /// <summary>
        /// 해당 채팅서버를 실행하고 접속을 대기시킴
        /// </summary>
        public void StartMessage()
        {
            var ipaddr = IPAddress.Parse(ipaddress);

            try
            {
                System.Net.Sockets.TcpListener serverListener = new System.Net.Sockets.TcpListener(ipaddr, 3333);
                serverListener.Start();
                FTPServer.Logger.Text += "채팅서버 가동>>>>\n";
                ChattingElement chattingAll = new ChattingElement();//전체 채팅방
                chattingAll.RoomName = "전체";

                chattingList.Add(chattingAll);//전체 사용자에게 전송되는 방,,,

                for (; ;)
                {
                    var    chatClientSocket = serverListener.AcceptTcpClient();//접속된 클라이언트 반환
                    string clientNickName   = null;
                    if (chatClientSocket.Connected)
                    {
                        var    ns       = chatClientSocket.GetStream();
                        Byte[] byteFrom = new Byte[chatClientSocket.SendBufferSize];
                        ns.Read(byteFrom, 0, chatClientSocket.SendBufferSize);
                        clientNickName = Encoding.UTF8.GetString(byteFrom);


                        int index = clientNickName.IndexOf("\0");
                        clientNickName         = clientNickName.Remove(index, clientNickName.Length - index);
                        FTPServer.Logger.Text += "채팅접속을 감지했습니다\n";
                        if (!clientList.Contains(clientNickName))
                        {
                            clientList.Add(clientNickName, chatClientSocket);//채팅참여자 관리
                            FTPServer.Logger.Text += "\n" + clientNickName + "님이 접속했습니다\n";
                            Broadcast(clientNickName + "님 접속했습니다", clientNickName, true);

                            //참여자 목록(clientList)을 클라이언트 접속한 클라이언트에 접속

                            string roomList = "";
                            int    count    = 0;
                            foreach (ChattingElement item in chattingList)
                            {
                                if (count != 0)
                                {
                                    roomList += "," + item.RoomName;
                                }
                                else
                                {
                                    roomList += item.RoomName;
                                }
                                count++;
                            }
                            string memberList = "";
                            count = 0;
                            foreach (DictionaryEntry v in clientList)
                            {
                                if (count != 0)
                                {
                                    memberList += "," + v.Key;
                                }
                                else
                                {
                                    memberList += v.Key;
                                }
                                count++;
                            }


                            Broadcast("접속 인원:" + memberList + "::", clientNickName, true);
                            Broadcast("방 목록:" + roomList + ";;", clientNickName, true);

                            ChatClientSocket client = new ChatClientSocket(chatClientSocket, clientNickName, ChatServer.clientList);
                        }
                        else
                        {
                            Unicast("해당 닉네임은 존재합니다", chatClientSocket);
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }//서버가 대기하기 시작함
        }