BS模式下SOCKET即时通讯 联系客服

发布时间 : 星期日 文章BS模式下SOCKET即时通讯更新完毕开始阅读da6a3ad4c1c708a1284a440a

//实现即时通讯的方法和变量 private int maxPacket = 512; ///

/// 用于接受消息的线程 /// private Thread thread = null; /// /// 用于接受和发送的网络流,从登录窗体得到 /// private NetworkStream netstrm = null; /// /// 服务器套接字的字符串形式,从登录窗体得到 /// //string strpublic = null; #region 实现及时提醒 /// /// 提取命令 /// 格式为两个一位整数拼接成的字符串。 /// 第一位为0表示客户机向服务器发送的命令,为1表示服务器向客户机发送的命令。 /// 第二位表示命令的含义,具体如下: /// \服务器要求客户机更新在线列表 /// \服务器要求客户机做闪屏振动 /// default-接受用户消息或者系统消息的正文 /// /// /// 拼接成的命令 private string DecodingBytes(byte[] s) { //连接 String 的一个或多个实例 return string.Concat(s[0].ToString(), s[1].ToString()); } /// /// 接受消息的线程执行体 /// private void ReceiveMsg() { bool flag = true; while (flag) { try { netstrm = (NetworkStream)Session[\]; byte[] packet = new byte[maxPacket]; netstrm.Read(packet, 0, packet.Length); string cmd = DecodingBytes(packet); switch (cmd) { /// \服务器要求客户机更新在线列表 /// default-接受用户消息或者系统消息的正文 case \: { break; } default: { string displaytxt = Encoding.Unicode.GetString(packet); Session[\] = displaytxt; // Page.ClientScript.RegisterStartupScript(GetType(), \\ break; } } } catch (SocketException) { Thread.CurrentThread.Abort(); } } } #endregion protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //为会话创建线程 thread = new Thread(new ThreadStart(ReceiveMsg)); thread.Start(); } }

1)向操作系统注册:让操作系统将一个端口和服务器通讯进程绑定。这个端口就代表了这通讯进程。ServerSocket ss = new ServerSocket(port),服务端通讯进程在port端口监听。

2)Socket socket = serverSocket.accept();取出一个客户端的socket连接。如果没有客户端的连接到来,就一直等待,也就是阻塞状态

3)通过socket和客户端socket通讯,怎么通讯呢?通过

socket.getOutputSteam(),socket.getInputStream()进行流的传递。 客户端:

1)和服务器建立连接:Socket socket = new Socket(ip地址,port); 如果创建socket对象成功,代表连接建立。如果抛出异常,连接建 立不成功。

2)通过socket获取输入输出流对象。

socket.getInputStream(),socket.getOutputStream().