首页 > 其他分享 >西门子PCL-1200(tcp)

西门子PCL-1200(tcp)

时间:2023-06-01 21:14:53浏览次数:61  
标签:Console string 1200 tcp System static PCL new byte

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace Test1
{
using System;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;
using System.Linq;

namespace client
{
class Program
{
//创建Socket连接对象
private static Socket clientSocket = null;
//运行标志位
private static bool isRunning = false;

private static Thread thrClient;

private static byte[] setArray = new byte[243];
static void Main(string[] args)
{
//Console.WriteLine("客户端,请输入Socket连接方式TCP1,UDP:");
//string sendMsg = Console.ReadLine();
//if (sendMsg.Contains("1"))
//{
// TcpClient();
//}
//else
//{
// UdpClient();
//}


byte[] ReceiveData = new byte[243]; //定义一个接收数据的数组
byte[] SendData = new byte[12] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x00, 0x00, 0x01 }; //定义一个发送数据的数组
IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 10, 12 }); //封装IP地址
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //新建一个Socket实例
socket.Connect(ipAddress, 2001); //连接服务器
Console.WriteLine("连接状态:{0}\t", socket.Connected); //显示连接状态
socket.Send(SendData); //发送modbus tcp数据帧
socket.Receive(ReceiveData); //接收modbus tcp数据帧
Console.Write("接收数据帧:\t");
while (true)
{
//接收消息
//定义一个接受缓冲区
byte[] arrMsgRcv = new byte[243];
int length = -1;
try
{
length = socket.Receive(arrMsgRcv);
}
catch (Exception)
{
//MessageBox.Show("异常");
}
if (length > 0)
{
string message1 = string.Join(",", arrMsgRcv.Select(o => o.ToString("X")));
string result = "";
for (int i = 0; i < arrMsgRcv.Length - 10; i++)
{
var ss = BitConverter.ToInt16(arrMsgRcv, i);
result += " " + IPAddress.NetworkToHostOrder(ss);
}

//WriteTxt(message1);
WriteTxt(result);
}
}

Console.ReadLine();


}

public static string ToHexString(byte[] bytes) // 0xae00cf => "AE00CF "

{

string hexString = string.Empty;

if (bytes != null)

{

StringBuilder strB = new StringBuilder();

for (int i = 0; i < bytes.Length; i++)

{

strB.Append(bytes[i].ToString("X2"));

}

hexString = strB.ToString();

}
return hexString;

}

 

public static void TcpClient()
{
Console.WriteLine("按任意键开始连接服务器...");
Console.ReadKey();
//创建一个客户端Socket
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接服务器
clientSocket.Connect(new IPEndPoint(IPAddress.Parse("192.168.10.12"), 2001));
Console.WriteLine("连接服务器成功");
isRunning = true;


while (true)
{
Console.WriteLine("请输入要发送的消息:");
string sendMsg = Console.ReadLine();
if (!string.IsNullOrEmpty(sendMsg))
{
//发送消息
clientSocket.Send(System.Text.Encoding.UTF8.GetBytes(sendMsg));
if (sendMsg == "quit")
{
//关闭连接
clientSocket.Close();
break;
}
get();
//开始线程接受PLC报文
// ReceiveMessage_aaa();
}
}

 

}

public static void get()
{

while (true)
{
//接收消息
byte[] data = new byte[1024*3];
int length = clientSocket.Receive(data);

string receiveMsg = Encoding.Default.GetString(data, 0, length);
var a = ExtentMethod.ToUnicodeString(receiveMsg);
if (receiveMsg == "quit")
{
Console.WriteLine($"客户端输入命令:{receiveMsg},表示客户端断开了连接!");
break;
}
Console.WriteLine("接收到消息:" + receiveMsg);
//WriteTxt(receiveMsg);
}
}


/// <summary>
/// 接受和处理PLC返回的报文
/// </summary>
private static void ReceiveMessage_aaa()
{
while (isRunning == true)
{
//定义一个接受缓冲区
byte[] arrMsgRcv = new byte[243];
int length = -1;
try
{
length = clientSocket.Receive(arrMsgRcv);
}
catch (Exception)
{
throw new Exception();
}
if (length > 0)
{
string message = Encoding.UTF8.GetString(setArray, 0, length);
//WriteTxt(message);
}

}

}

/// <summary>
///
/// </summary>
public static void UdpClient()
{
//做好链接准备
UdpClient client = new UdpClient(); //实例一个端口
IPAddress remoteIP = IPAddress.Parse("192.168.10.10"); //假设发送给这个IP
int remotePort = 2000; //设置端口号
IPEndPoint remotePoint = new IPEndPoint(remoteIP, remotePort); //实例化一个远程端点
Console.WriteLine("请输入发送内容...");
while (true)
{
var sendString = Console.ReadLine();//要发送的数据
if (!string.IsNullOrEmpty(sendString))
{

byte[] sendData = Encoding.Default.GetBytes(sendString);
client.Send(sendData, sendData.Length, remotePoint);//将数据发送到远程端点
Console.WriteLine("数据发送成功!");
if (sendString == "quit")
{
client.Close();//关闭连接
break;
}
}
}
}

////方法二:写入到同一个Txt文件
/// <summary>
/// 写入记事本
/// </summary>
/// <param name="log">日志内容</param>
/// <param name="filepath">文件路径(含文件名)</param>
/// <returns></returns>
public static void WriteTxt(string log)
{
string filepath = @"C:\Users\YJM\Desktop\demo";
try
{
string folder = filepath.Substring(0, filepath.LastIndexOf('\\'));
// 创建目录
if (Directory.Exists(folder) == false)
{
Directory.CreateDirectory(folder);
}
// 当文件不存在时创建文件
if (File.Exists(filepath) == false)
{
FileStream fs = File.Create(filepath);
fs.Close();
}
// 写入文件内容
File.AppendAllText(filepath, "【" + DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + "】" + log + "\r\n", Encoding.Default);

}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

}
}

public static class ExtentMethod
{
public static string ToUnicodeString(this string str)
{
StringBuilder strResult = new StringBuilder();
if (!string.IsNullOrEmpty(str))
{
for (int i = 0; i < str.Length; i++)
{
strResult.Append("\\u");
strResult.Append(((int)str[i]).ToString("x"));
}
}
return strResult.ToString();
}

public static string FromUnicodeString(this string str)
{
//最直接的方法Regex.Unescape(str);
StringBuilder strResult = new StringBuilder();
if (!string.IsNullOrEmpty(str))
{
string[] strlist = str.Replace("\\", "").Split('u');
try
{
for (int i = 1; i < strlist.Length; i++)
{
int charCode = Convert.ToInt32(strlist[i], 16);
strResult.Append((char)charCode);
}
}
catch (FormatException ex)
{
return Regex.Unescape(str);
}
}
return strResult.ToString();
}
}
}

标签:Console,string,1200,tcp,System,static,PCL,new,byte
From: https://www.cnblogs.com/yjm8023/p/17450209.html

相关文章

  • adb restarting in TCP mode port: 5555
    adb连接出现以下问题:restartinginTCPmodeport:5555出现原因一是由于adb连接了多个设备,二是系统自行安装的adb,模拟器里面又自带的adb解决办法:对于第一种我们可以查看连接设备,及其设备号,进入指定设备。对于其他命令也是一样的。输入:adb-s设备号命令如果只有一个模拟器和一......
  • TCP/IP 协议体系结构模型
    TCP/IP协议体系结构模型OSI模型通过一系列协议描述了理想的网络通信。TCP/IP并不直接对应于此模型。TCP/IP或者将几个OSI层组合为一个层,或者根本不使用某些层。下表显示了OracleSolaris:实现的TCP/IP层。该表列出了从最顶层(应用层)到最底层(物理网络层)的各层。表 1–2TC......
  • Tcpreplay重放pcap包, tcprewrite编辑pcap文件
    Tcpreplay是一种pcap包的重放工具,它可以将tcpdump和Ethereal/Wireshark等工具捕捉到的网络流量包进行编辑修改和重放.重写Layer2、3、4层数据包,并将流量重新发送至目标网络,这样通过重放网络流量包从而实现复现问题情景以定位bugtcpreplay本身包含了几个辅助工具(tcpprep、tcpr......
  • Android基于TCP的局域网聊天通信
    概述在同一局域网内,两台设备通过TCP进行通信聊天。详细一、准备工作开发环境jdk1.8 EclipseLunaServiceRelease1(4.4.1)运行环境:华为荣耀6(Android4.4)、华为p9(Android7.0)实现功能:同一局域网下,两台设备进行tcp通信聊天。二、程序实现工程截图:2、实现思路Androi......
  • 【tcp】记一次grpc接口测试的三次挥手
    1、现象 平时都是四次挥手,为啥没有服务端确认的ack呢 2、解释(84条消息)为什么书上说是TCP四次挥手,但是实际会出现TCP三次挥手?_tcp挥手只抓到3_倾听铃的声的博客-CSDN博客~$cat/boot/config-4.15.0-1config-4.15.0-163-genericconfig-4.15.0-175-genericcon......
  • wireshark分析tcp传输之文件上传速率问题
    在网络性能问题排查思路那一节里,我提到了查看系统网络瓶颈的方法以及排查丢包问题的手段。但就此分析网络问题还不够精细,有时网络资源并没有达到瓶颈,或者并没有丢包产生,但是网络传输速率就是很慢,或者有丢包产生,但无法知道丢包的详细过程,无法知道整个tcp传输过程的具体情况。如何......
  • TCPIP详解-地址解析协议ARP
    TCP/IP详解-地址解析协议ARPIP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作。这需要网络层软件使用的地址和底层网络硬件使用的地址之间进行转换。网络接口硬件通常有一个主要的硬件地址定位到正确的接口;否则,无法传输数据。但是,一个传统IPv4网路偶需要使用自己的......
  • go 执行ssh 报错ssh: handshake failed: read tcp xxx:->xxx:22: read: connection re
    需求:解决报错go执行ssh报错ssh:handshakefailed:readtcpxxx:->xxx:22:read:connectionresetbypeer 10个以内,没有问题。10以上就报错解决:我的远程(192.168.49.171)服务器ssh默认最大限制10解除限制,下面的操作都是在49.171上操作的。1.编辑sshd_confi......
  • TCP传输视频如何分包?
    TCP(传输控制协议)是一种面向连接的、可靠的传输层协议,用于在计算机网络上可靠地传输数据。TCP的设计目标是提供高可靠性、有序性和流量控制的数据传输。TCP的一般工作原理:建立连接:在进行数据传输之前,发送方和接收方需要通过三次握手建立TCP连接。握手过程中,双方交换并确认初始序列号......
  • java 网络通讯:tcp,upd,http
    java网络通讯:tcp,upd,http1.TCP通信服务端用的代表类:ServerSocket类,注册端口。调用accept()方法阻塞等待接收客户端连接。得到Socket对象。TCP通信的基本原理?客户端怎么发,服务端就应该怎么收。客户端如果没有消息,服务端会进入阻塞等待。Socket一方关闭或者出现异常、对方......