public void SendLoginMsg(ClientMsgModel msg, User user) { //IPAddress ip = IPAddress.Parse(user.client.Client.RemoteEndPoint.ToString()); OnlineUser __onlineUser = new OnlineUser(); __onlineUser.IP = (user.client.Client.RemoteEndPoint as IPEndPoint).Address.ToString(); __onlineUser.Port = (user.client.Client.RemoteEndPoint as IPEndPoint).Port.ToString(); __onlineUser.UserName = msg.UserName; if (!this.onlineUser.Contains(__onlineUser)) { this.onlineUser.Add(__onlineUser); } SetListBox(string.Format("登录IP:{0},端口:{1}", msg.IP, msg.Port)); ServerMsgModel __serMsgModel = new ServerMsgModel(); __serMsgModel.SendIP = msg.IP; __serMsgModel.SendPort = msg.Port; __serMsgModel.SendUserName = msg.UserName; __serMsgModel.SendType = msg.Type; __serMsgModel.OnlineUser = this.onlineUser; string __sendSerMsg = JsonConvert.SerializeObject(__serMsgModel); for (int i = 0; i < this.userList.Count; i++) { SendToClient(userList[i], __sendSerMsg); } }
private void ChatClient_FormClosing(object sender, FormClosingEventArgs e) { try { if (this.client != null) { //发送套接字、编辑的内容、用户名、发送时间。 ClientMsgModel msg = new ClientMsgModel() { IP = this._user.p_serverIP, Port = this._user.p_serverPort, Msg = "SignOut", NowDate = DateTime.Now.ToString(), Type = "3", UserName = this._user.p_userName }; //string sendMsg = ConvertJson.ToJson(msg); string sendMsg = JsonConvert.SerializeObject(msg); isExit = true; br.Close(); bw.Close(); this.client.Close(); } } catch (Exception ex) { throw ex; } }
private void btnSend_Click(object sender, EventArgs e) { try { //Func<OnlineUser, bool> b = OnlineUser ol = this._onlineUser.Where(delegate(OnlineUser olUser) { return(olUser.UserName == this.lbx在线列表.SelectedItem.ToString()); }).FirstOrDefault(); //发送套接字、编辑的内容、用户名、发送时间。 ClientMsgModel msg = new ClientMsgModel() { IP = this._user.p_serverIP, Port = this._user.p_serverPort, Msg = this.txtSendMsg.Text, NowDate = DateTime.Now.ToString(), Type = "2", UserName = this._user.p_userName, ReceiveIP = ol.IP, ReceivePort = ol.Port, }; //string sendMsg = ConvertJson.ToJson(msg); string sendMsg = JsonConvert.SerializeObject(msg); SendString(sendMsg); this.txtSendMsg.Clear(); } catch (Exception ex) { throw ex; } }
public ChatClient(User v_user) { InitializeComponent(); this._user = v_user; //建立网络通信 try { this.client = new TcpClient(this._user.p_serverIP, int.Parse(this._user.p_serverPort));//定义服务器端ip地址和端口,与服务器端定义要一致 this.linkFlag = true; } catch { return; } this._addList = new AddListBoxItemCallBack(this.AddListBoxItem); this._appendChatMsgText = new AppendChatMsgTextCallBack(this.AppendChatMsgText); if (this.linkFlag) { //获取网络流 networkStream = client.GetStream(); //将网络作为二进制读写对象,使用utf8编码 br = new BinaryReader(networkStream); bw = new BinaryWriter(networkStream); //发送套接字、编辑的内容、用户名、发送时间。 ClientMsgModel msg = new ClientMsgModel() { IP = this._user.p_serverIP, Port = this._user.p_serverPort, Msg = this.txtSendMsg.Text, NowDate = DateTime.Now.ToString(), Type = "1", UserName = this._user.p_userName }; //string sendMsg = ConvertJson.ToJson(msg); string sendMsg = JsonConvert.SerializeObject(msg); SendString(sendMsg); ThreadStart ts = new ThreadStart(ReceiveData); Thread thRece = new Thread(ts); thRece.Start(); } this.Text = this.Text + " 当前登录名:" + this._user.p_userName; }
/// <summary> /// 接收、处理客户端信息,每客户1个线程,参数用于区分是哪个客户 /// </summary> /// <param name="obj"></param> public void ReceiveData(object obj) { User user = obj as User; TcpClient client = user.client; //是否正常退出接收线程 bool normalExit = false; //用于控制是否退出循环 bool exitWhile = false; while (exitWhile == false) { string receiveString = null; try { //从网络流中读出字符串 //此方法会自动判断字符串长度前缀,并根据长度前缀读出字符串 receiveString = user.br.ReadString(); } catch (Exception) { //底层套接字不存在时会出现异常 SetListBox("接收数据失败"); } if (receiveString == null) { if (normalExit == false) { //如果停止了监听,Connected为false if (client.Connected == true) { SetListBox(string.Format("与[{0}]失去联系,已终止接收该用户信息", client.Client.RemoteEndPoint)); } } break; } SetListBox(string.Format("来自[{0}]:{1}", user.client.Client.RemoteEndPoint, receiveString)); ClientMsgModel msg = new ClientMsgModel(); msg = (ClientMsgModel)JsonConvert.DeserializeObject(receiveString, typeof(ClientMsgModel)); switch (msg.Type) { case "1": this.SendLoginMsg(msg, user); break; case "2": User userReceive = this.userList.Where(delegate(User u) { return(u.client.Client.RemoteEndPoint.ToString() == msg.ReceiveIP + ":" + msg.ReceivePort); }).FirstOrDefault(); ServerMsgModel __serMsgModel = new ServerMsgModel(); __serMsgModel.SendIP = (user.client.Client.RemoteEndPoint as IPEndPoint).Address.ToString(); __serMsgModel.SendPort = (user.client.Client.RemoteEndPoint as IPEndPoint).Port.ToString(); __serMsgModel.SendUserName = msg.UserName; __serMsgModel.SendType = msg.Type; __serMsgModel.SendMsg = msg.Msg; string __sendSerMsg = JsonConvert.SerializeObject(__serMsgModel); SendToClient(userReceive, __sendSerMsg); break; default: break; } } userList.Remove(user); client.Close(); SetListBox(string.Format("当前连接用户数:{0}", userList.Count)); }