private void InitSocket() { server = new TcpListener(IPAddress.Any, 9999); clientSocket = default(TcpClient); server.Start(); DisplayText(">> Server Started"); while (true) { try { counter++; clientSocket = server.AcceptTcpClient(); DisplayText(">> Accept connection from client"); NetworkStream stream = clientSocket.GetStream(); byte[] buffer = new byte[1024]; int bytes = stream.Read(buffer, 0, buffer.Length); string user_name = Encoding.Unicode.GetString(buffer, 0, bytes); user_name = user_name.Substring(0, user_name.IndexOf("$")); clientList.Add(clientSocket, user_name); // send message all user SendMessageAll(user_name + " Joined ", "", false); handleClient h_client = new handleClient(); h_client.OnReceived += new handleClient.MessageDisplayHandler(OnReceived); h_client.OnDisconnected += new handleClient.DisconnectedHandler(h_client_OnDisconnected); h_client.startClient(clientSocket, clientList); } catch (SocketException se) { Trace.WriteLine(string.Format("InitSocket - SocketException : {0}", se.Message)); break; } catch (Exception ex) { Trace.WriteLine(string.Format("InitSocket - Exception : {0}", ex.Message)); break; } } clientSocket.Close(); server.Stop(); }
private void InitSocket() { server = new TcpListener(IPAddress.Any, 9999); clientSocket = default(TcpClient); server.Start(); DisplayText(">> Server Start!! <<"); while (true) {//클라이언트 요청 받음 -> 소켓과 닉네임 저장 try { clientSocket = server.AcceptTcpClient(); clientNum.Add(clientSocket, counter); fileStrm = new FileStream(Environment.CurrentDirectory + "\\Server\\bin\\Debug\\" + counter.ToString() + ".jpg", FileMode.Create, FileAccess.Write); counter++; //클라이언트 수 추가 DisplayText(">> Accept connection from client"); ///////////////////////////////// 닉네임 저장 //////////////////////////////// ClientProfile clientProfile = new ClientProfile(); //패킷을 위한 객체 stream = clientSocket.GetStream(); int bytes = stream.Read(this.readbuffer, 0, this.readbuffer.Length); string nickName = null; Packet packet = (Packet)Packet.Deserialize(this.readbuffer); clientProfile = (ClientProfile)Packet.Deserialize(this.readbuffer); nickName = clientProfile.nickName; clientList.Add(clientSocket, nickName); //클라이언트 리스트에 새로 접속한 클라이언트 소켓과 닉네임 저장 clients.Add(clientSocket); nickNameList.Add(nickName); clientScore.Add(counter - 1, 0); ////////////////////////////////////////////////////////////////////////////////// ///////// 새로 접속한 클라이언트에게 클라이언트 넘버 및 기존 닉네임들 전송 ///////// Init init = new Init(); init.clinetNumber = clientNum[clientSocket]; init.Type = (int)PacketType.초기화; for (int i = 0; i <= clientNum[clientSocket]; i++) { init.nickNameList[i] = (string)nickNameList[i]; } Packet.Serialize(init).CopyTo(this.sendbuffer, 0); stream.Write(this.sendbuffer, 0, this.sendbuffer.Length); stream.Flush(); resetBuffer(sendbuffer); /////////////////////////////////////////////////////////////////////////////////////// /*닉네임 추가 -> 라벨 추가하기 위해서 6.13 */ foreach (var pair in clientList) { TcpClient client = pair.Key as TcpClient; NickName nick_name = new NickName(); nick_name.client_sum = counter; //추가된 클라이언트수 nick_name.Type = (int)PacketType.닉네임; for (int i = 0; i <= clientNum[clientSocket]; i++) { nick_name.nickNameList[i] = (string)nickNameList[i]; } NetworkStream stream = client.GetStream(); Packet.Serialize(nick_name).CopyTo(this.sendbuffer, 0); stream.Write(this.sendbuffer, 0, this.sendbuffer.Length); this.stream.Flush(); resetBuffer(sendbuffer); } // send message all user SendMessageAll(nickName + "님이 접속하셨습니다.", "", false); //서버한테 //handleClient클래스는 클라이언트들을 다루는 클래스 handleClient h_client = new handleClient(); h_client.OnRequest += new handleClient.ClientRequestHandler(this.OnRequest); //클라이언트 요청 이벤트 핸들러 추가. h_client.OnDisconnected += new handleClient.DisconnectedHandler(h_client_OnDisconnected); //연결 끊겼을 때 h_client.startClient(clientSocket, clientList, clientNum); } catch (SocketException se) //소켓 연결에서의 예외 발생 { Trace.WriteLine(string.Format("InitSocket - SocketException : {0}", se.Message)); break; } catch (Exception ex) //그 외의 예외 발생 { Trace.WriteLine(string.Format("InitSocket - Exception : {0}", ex.Message)); break; } } clientSocket.Close(); server.Stop(); }
static void Main(string[] args) { //the creation of a client list List <DataBase> clientInfoListDB = new List <DataBase>(); //intantiate new client databse DataBase newClientDB = new DataBase(); //create new mutex for ciritcal region access (file write and database read) m = new Mutex(); //hostname String strHostName = string.Empty; //hardcoded port int port = 5001; //get hostname of computer strHostName = Dns.GetHostName(); Console.WriteLine("Host Name: {0}", strHostName); //get IPV4 addresses via loop IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); //loop through each IP and get the first one foreach (IPAddress ip in ipEntry.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { addr = ip; Console.WriteLine("IP Address: {0} ", addr.ToString()); break; } } //create listener server TcpListener server = new TcpListener(addr, port); //ipv4 TcpClient client = default(TcpClient); //convert IP address to string (for ease) Console.WriteLine("Port: {0} ", port.ToString()); //load all file info into list if (File.Exists(clientFile)) { using (System.IO.StreamReader inputStream = new System.IO.StreamReader(clientFile)) { while (!inputStream.EndOfStream) { string stringToSplit = inputStream.ReadLine(); string[] arrayOfSplits = stringToSplit.Split(new char[] { '*' }); clientInfoListDB.Add(new DataBase { MemberID = Convert.ToInt32(arrayOfSplits[0]), FirstName = arrayOfSplits[1], LastName = arrayOfSplits[2], DateOfBirth = arrayOfSplits[3], isEdit = 0 }); idNumber = clientInfoListDB.Count; } } } //error checking for server start failure try { server.Start(); Console.WriteLine("Server has started..."); } catch (Exception e) { Console.WriteLine(e.ToString()); Console.Read(); } //while loop to always listen for incoming client data while (true) { try { client = server.AcceptTcpClient(); //accept connection from client client.NoDelay = true; } catch (Exception e) { Console.WriteLine("ERROR " + e.ToString()); } handleClient Newclient = new handleClient(); Newclient.startClient(client, clientInfoListDB, m); } }