18,363
社区成员




static TcpClient m_tcpClient;
static Thread m_readThread = null;
/// <summary>
/// tcp 连接 发送数据
/// </summary>
/// <param name="strIp"></param>
/// <returns></returns>
public static string CommunicateTcp()
{
try
{
int Port = 80;//目标端口
string Ip = "192.168.1.50";//目标ip
IPAddress address = IPAddress.Parse(Ip);
IPAddress myIp = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]; //得到本机ip
int myPort = 6010;//本机使用端口
IPEndPoint localEndPoint = new IPEndPoint(myIp, myPort);
m_tcpClient = new TcpClient(localEndPoint);
m_tcpClient.Connect(address, Port);
if (m_readThread == null)
{
m_readThread = new Thread(ReceiveDataThread);
}
m_readThread.Start();
NetworkStream ns = m_tcpClient.GetStream();
if (true)
{
byte[] bytes = new byte[10];//建立缓冲区
bytes[0] = Convert.ToByte('L');
bytes[1] = Convert.ToByte('V');
bytes[2] = Convert.ToByte('S');
bytes[3] = Convert.ToByte('P');
bytes[4] = Convert.ToByte('=');
bytes[5] = Convert.ToByte('0');
bytes[6] = Convert.ToByte('0');
bytes[7] = Convert.ToByte('0');
bytes[8] = Convert.ToByte('0');
bytes[9] = Convert.ToByte('\0');
// 创建跟ups连接的socket
Socket ups_sok = m_tcpClient.Client;// new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//// 接收远程UPS控制器的反馈数据
//IPEndPoint senderEP = new IPEndPoint(IPAddress.Any, 2353);
//// 按照msdn的要求binding,此时我们作为服务端收数据。
//ups_sok.Bind(senderEP);
ups_sok.ReceiveTimeout = 15000;
byte[] buffer = new Byte[256];
// 发送数据到远程UPS控制器
ns.Write(bytes, 0, bytes.Length);
ups_sok.Receive(buffer);
byte[] data = new byte[5];
int bytesRead = ns.Read(data, 0, data.Length);//读取字节流
}
ns.Close();
m_tcpClient.Close();
}
catch (System.Exception e)
{
string strError = "发送失败:" + e.Message;
return strError;
}
return "连接成功";
}
/// <summary>
/// 接收数据线程
/// </summary>
public static void ReceiveDataThread()
{
Byte [] ReciveData = new Byte[1024];
int len = 0;
if (m_readThread ==null)
{
return;
}
bool _Continue = true;
NetworkStream stream;
int count;
while (_Continue)
{
if (m_tcpClient.Connected)
stream = m_tcpClient.GetStream();
else
{
Thread.Sleep(50);
continue;
}
try
{
len = stream.Read(ReciveData, 0, ReciveData.Length);
if (len != 0)
{
_Continue = false;
}
}
catch (Exception err)
{
CloseClientSocket();
}
}
}