Files
15-WeiChai-MES_Manage/App_code/webChatClient.cs

168 lines
5.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
/// <summary>
/// 服务器是否反馈
/// </summary>
public static bool ServersResponse = false;
/// <summary>
/// 命令状态
/// </summary>
public static bool commandstatus = false;
/// <summary>
/// 是否正忙
/// </summary>
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;
}
}
}