BS模式下SOCKET即时通讯

  • 格式:doc
  • 大小:35.00 KB
  • 文档页数:4
break;
}
}
}
catch(SocketException)
{
Thread.CurrentThread.Abort();
}
}
}
#endregion
protectedvoidPage_Load(objectsender, EventArgs e)
{
if(!IsPostBack)
{
//为会话创建线程
thread =newThread(newThreadStart(ReceiveMsg));
///第一位为0表示客户机向服务器发送的命令,为1表示服务器向客户机发送的命令。
///第二位表示命令的含义,具体如下:
///"11"-服务器要求客户机更新在线列表
///"12"-服务器要求客户机做闪屏振动
///default-接受用户消息或者系统消息的正文
///</summary>
///<param name="s">要解析的包含命令的byte数组,只提取前两个字节</param>
3)通过socket和客户端socket通讯,怎么通讯呢?通过socket.getOutputSteam(),socket.getInputStream()进行流的传递。
客户端:
1)和服务器建立连接:Socket socket = new Socket(ip地址,port);
如果创建socket对象成功,代表连接建立。如果抛出异常,连接建立不成功。
privateNetworkStream netstrm =null;
///<summary>
///服务器套接字的字符串形式,从登录窗体得到
///</summary>
//string strpublic = null;
#region实现及时提醒
///<summary>
///提取命令
///格式为两个一位整数拼接成的字符串。
thread.Start();
}
}
1)向操作系统注册:让操作系统将一个端口和服务器通讯进程绑定。这个端口就代表了这通讯进程。ServerSocket ss = new ServerSocket(port),服务端通讯进程在port端口监听。
2)Socket socket = serverSocket.accept();取出一个客户端的socket连接。如果没有客户端的连接到来,就一直等待,也就是阻塞状态
netstrm.Read(packet,0, packet.Length);
stringcmd = DecodingBytes(packet);
switch(cmd)
{
///"11"-服务器要求客户机更新在线列表
///default-接受用户消息或者系统消息的正文
case"11":
{break;}源自default:///接受消息的线程执行体
///</summary>
privatevoidReceiveMsg()
{
boolflag =true;
while(flag)
{
try
{
netstrm = (NetworkStream)Session["netstream"];
byte[] packet =newbyte[maxPacket];
//实现即时通讯的方法和变量
privateintmaxPacket =512;
///<summary>
///用于接受消息的线程
///</summary>
privateThread thread =null;
///<summary>
///用于接受和发送的网络流,从登录窗体得到
///</summary>
{
stringdisplaytxt = Encoding.Unicode.GetString(packet);
Session["txtMsg"] = displaytxt;
// Page.ClientScript.RegisterStartupScript(GetType(), "", "<script>alert('"+displaytxt+"');</script>");
2)通过socket获取输入输出流对象。socket.getInputStream(),socket.getOutputStream().
///<returns>拼接成的命令</returns>
privatestringDecodingBytes(byte[] s)
{
//连接String的一个或多个实例
returnstring.Concat(s[0].ToString(), s[1].ToString());
}
///<summary>