C# 群聊 服务器怎么把消息转发给其他客户端?格式是登陆用户名+时间+(换行)消息,40分谢谢。

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Net.Sockets;namespaceAsynTcpServer{publicpartialclassfrm_Main:Form{TcpListenerListener;List<MyFriend>Friends;publicfrm_Main(){InitializeComponent();}privatevoidbtn_Clear_Click(objectsender,EventArgse){lst_Info.Items.Clear();}privatevoidfrm_Main_Load(objectsender,EventArgse){textBox1.Text=land.userName;//IPAddressmyip=Dns.GetHostAddresses(Dns.GetHostName())[0];IPAddressmyip=IPAddress.Parse("127.0.0.1");IPEndPointmyep=newIPEndPoint(myip,5000);Listener=newTcpListener(myep);Friends=newList<MyFriend>();//buffer=newbyte[128];}delegatevoidShowInfoDel(Stringstr);privatevoidShowInfo(Stringstr){if(lst_Info.InvokeRequired){ShowInfoDeld=newShowInfoDel(ShowInfo);lst_Info.Invoke(d,str);}else{lst_Info.Items.Add(System.DateTime.Now);lst_Info.Items.Add(str);lst_Info.SelectedIndex=lst_Info.Items.Count-1;lst_Info.ClearSelected();}}delegatevoidFriendDel(MyFriendfriend);privatevoidAddFriend(MyFriendfriend){if(cmb_Friend.InvokeRequired){FriendDeld=newFriendDel(AddFriend);cmb_Friend.Invoke(d,friend);}else{cmb_Friend.Items.Add(friend.socket.RemoteEndPoint.ToString());Friends.Add(friend);}}privatevoidRemoveFriend(MyFriendfriend){if(cmb_Friend.InvokeRequired){FriendDeld=newFriendDel(RemoveFriend);cmb_Friend.Invoke(d,friend);}else{intindex=Friends.IndexOf(friend);cmb_Friend.Items.RemoveAt(index);Friends.RemoveAt(index);}}privatevoidbtn_Start_Click(objectsender,EventArgse){Listener.Start();ShowInfo(String.Format("启动了服务器的侦听:{0}",Listener.LocalEndpoint.ToString()));AsyncCallbackcallback=newAsyncCallback(AcceptCallBack);Listener.BeginAcceptSocket(callback,Listener);ShowInfo(String.Format("异步接受客户端的连接请求"));}privatevoidAcceptCallBack(IAsyncResultar){TcpListenerListener=(TcpListener)ar.AsyncState;Socketclient;try{client=Listener.EndAcceptSocket(ar);}catch{return;}ShowInfo(String.Format("成功地接受了{0}的连接请求",client.RemoteEndPoint.ToString()));AsyncCallbackcallback=newAsyncCallback(AcceptCallBack);Listener.BeginAcceptSocket(callback,Listener);MyFriendfriend=newMyFriend(client);AddFriend(friend);friend.ClearBuffer();callback=newAsyncCallback(ReceiveCallBack);friend.socket.BeginReceive(friend.Rcvbuffer,0,friend.Rcvbuffer.Length,SocketFlags.None,callback,friend);}privatevoidReceiveCallBack(IAsyncResultar){MyFriendfriend=(MyFriend)ar.AsyncState;try{Int32count=friend.socket.EndReceive(ar);if(count==0)thrownewException();StringstrRcv=System.Text.Encoding.Default.GetString(friend.Rcvbuffer,0,count);ShowInfo(String.Format("{0}:{1}",friend.socket.RemoteEndPoint.ToString(),strRcv));AsyncCallbackcallback=newAsyncCallback(ReceiveCallBack);friend.socket.BeginReceive(friend.Rcvbuffer,0,friend.Rcvbuffer.Length,SocketFlags.None,callback,friend);}catch{RemoveFriend(friend);friend.Dispose();}}privatevoidbtn_Stop_Click(objectsender,EventArgse){Listener.Stop();}privatevoidfrm_Main_FormClosing(objectsender,FormClosingEventArgse){Application.Exit();}privatevoidbtn_Send_Click(objectsender,EventArgse){if(cmb_Friend.SelectedIndex<0){ShowInfo("请选择发送对象");cmb_Friend.Focus();return;}if(txt_Send.Text.Trim().Length==0){ShowInfo("请填写要发送的信息");txt_Send.Focus();return;}Byte[]data=System.Text.Encoding.Default.GetBytes(txt_Send.Text.Trim());Friends[cmb_Friend.SelectedIndex].socket.Send(data,0,data.Length,SocketFlags.None);}}}

解决方案

时间: 2024-09-05 06:43:24

C# 群聊 服务器怎么把消息转发给其他客户端?格式是登陆用户名+时间+(换行)消息,40分谢谢。的相关文章

[短讯]美国地质勘探局网站消息,2012年10月24日北京时间8点45分哥斯达黎加发生6.6级地震,震源深度19公里

[短讯]美国地质勘探局网站消息,2012年10月24日http://www.aliyun.com/zixun/aggregation/17197.html">北京时间8点45分哥斯达黎加发生6.6级地震,震源深度19公里

环信群聊 js SDK ,无法收到从iOS 客户端发来的聊天消息

问题描述 从环信管理后台直接发可以收到,可能会是什么问题呢?iOS 客户端之间可以正常相互收发 解决方案 看你这个问题描述,就是你js那边没有发成功.聊天的话,appkey必须是一致的,不同的appkey之间是相互隔离的.

求一份 iOS 3.x 群聊demo

问题描述 rt  希望可以给一份3.x的iOS群聊 demo   做了两天  在单聊的基础上做的  报错解决不了  要被领导骂了 解决方案 QQ邮箱给我,我给你发一份.解决方案二:@donghai 能否发个文章,大家一起分享下解决方案三:18315919272@163.com发我一份,,,谢谢解决方案四:谁发给我一份 万分感谢   87198129@qq.com解决方案五:谁发给我一份 万分感谢  739444040@qq.com解决方案六:大神 也给我发一份呢 万分谢谢 在线等回复 11841

Android中使用WebSocket实现群聊和消息推送功能(不使用WebView)

WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考:如何理解 TCP/IP, SPDY, WebSocket 三者之间的关系? 今天的重点是讲如何在Android中脱离WebView使用WebSocket,而不是在Web浏览器

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

 SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr 源码:http://pan.baidu.com/s/1dETGYGT 应用情景之一:     没太多连续的时间来研究SignalR,所以我把这篇文章分了三个阶段: 第一

消息转发服务器如何实现?

问题描述 消息转发服务器如何实现? 类似于QQ的服务器,QQ好友之间发送的消息如果是通过服务器转发的,服务器是如何实现的.如果两个人都连接的是一个服务器的话直接转发,但是如果两个人连接的是不同的服务器呢? 解决方案 根据那个好友所在服务器的地址去访问,把内容带过去,请求另一台服务器的发送消息方法就好呗

群聊消息发送不成功

问题描述 W/**.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.jivesoftware.smackx.muc.MultiUserChat.getRoom()' on a null object referenceW/**.err﹕ at com.easemob.chat.EMSendMessageRunnable.sendMessageXmpp(Unkno

【iOS】单聊可以发出消息,但是群聊发不出去

问题描述 解决方案 发不出去,有error么.是不是消息的type没有设置为群聊解决方案二:你可以在demo测试一下有没有问题.把demo的appKey改成你自己的,用你的账号进行测试.如果demo没有问题,说明还是你集成哪里有不对的地方.解决方案三:你的错误提示是不是        RECV: <message from='easemob-demo#chatdemoui_99495084839404048@conference.easemob.com' to='easemob-demo#cha

android,环信3.0,进入群聊,没问题,但是在里面发消息和收消息都失败,报错603

问题描述 点击进入群聊是没有问题EMClient.getInstance().groupManager().joinGroup(emGroupId);但是进入群聊以后,发送消息都失败了,报错603,User has no right for this operation.收消息也收不到,这是什么问题?明明都加入群组了,为什么还报这个错? 解决方案 嗯 那你看下你在这个群组中是不是被群主屏蔽了呢,如果被群主屏蔽的话,就没有这个权限了.