using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using MES_SPC; namespace ChatClient { public static class webChatClient { private static bool stopFlag; /// /// 服务器是否反馈 /// public static bool ServersResponse = false; /// /// 命令状态 /// public static bool commandstatus = false; /// /// 是否正忙 /// public static bool isworking = false; //与服务器的连接 static TcpClient tcpClient= new TcpClient(); //与服务器数据交互的流通道 private static NetworkStream Stream; ////客户端的状态 //private static string CLOSED = "closed"; //private static string CONNECTED = "connected"; //private static string state = CLOSED; ////private static bool stopFlag; static bool connect() { string HostName = ApplicationConfiguration.GPRSDataHost; ; //IPHostEntry dnstoip = new IPHostEntry(); //dnstoip = Dns.GetHostEntry(HostName); //string HostIP = dnstoip.AddressList[0].ToString(); string Port = ApplicationConfiguration.GPRSDataPort; return connect(HostName, Port); } private static bool connect(string HostName, string Port) { try { if (!tcpClient.Connected) { tcpClient = new TcpClient(); tcpClient = TcpClientConnector.Connect(HostName, Int32.Parse(Port), 1000); Stream = tcpClient.GetStream(); //Thread thread = new Thread(new ThreadStart(ServerResponse)); //thread.Start(); string cmd = "CONN|" + "WEB" + "|!"; Byte[] outbytes = System.Text.Encoding.Default.GetBytes( cmd.ToCharArray()); Stream.Write(outbytes, 0, outbytes.Length); } return true; } catch (Exception ex) { return false; } } //当单击“离开”按钮时,便进入了btnExit_Click 处理程序。 //在btnExit_Click 处理程序中, //将“EXIT”命令发送给服务器,此命令格式要与服务器端的命令格式一致 private static void EXIT() { try { if (tcpClient.Connected) { string message = "EXIT|" + "WEB" + "|!"; //将字符串转化为字符数组 Byte[] outbytes = System.Text.Encoding.Default.GetBytes( message.ToCharArray()); Stream.Write(outbytes, 0, outbytes.Length); tcpClient.Close(); } } catch { } } private static void ServerResponse() { //定义一个byte数组,用于接收从服务器端发送来的数据, //每次所能接收的数据包的最大长度为1024个字节 byte[] buff = new byte[1024]; string msg; int len; try { if (!Stream.CanRead) { //return "不可读"; return; } stopFlag = false; while (!stopFlag) { //从流中得到数据,并存入到buff字符数组中 len = Stream.Read(buff, 0, buff.Length); if (len < 1) { Thread.Sleep(200); continue; } ServersResponse = true; } tcpClient.Close(); //关闭连接 } catch { //return "网络发生错误"; } } static string command = ""; //当点击“发送”按钮时,便会进入btnSend_Click处理程序。 //在btnSend_Click处理程序中,如果不是私聊, //将“CHAT”命令发送给服务器, //否则(为私聊),将“PRIV”命令发送给服务器, //注意命令格式一定要与服务器端的命令格式一致 public static void sentmessage(string GPRScommand) { if (isworking) { return; } isworking = true; try { command = GPRScommand; commandstatus = false; if (connect()) { byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()); Stream.Write(outbytes, 0, outbytes.Length); commandstatus = true; } else { commandstatus = false; } } catch (Exception err) { tcpClient.Close(); commandstatus = false; } isworking = false; } } }