Я пытаюсь реализовать программу, которая отправляет данные на TCP-сервер, а затем получает такое же сообщение через COM-порт.У меня есть следующий код, но он отправляет данные, но не получает никаких данных.
Когда я наблюдаю за последовательным портом, я не вижу, что данные получены.
Как я могупочини это?Нужно ли переходить на многопоточную систему или есть другой способ синхронизации?Потому что я вижу, что COM-порт открыт, но не считывается.
И когда я тестирую это с Putty, я могу заставить его работать.
public class Variables
{
private static int v_VarI = 0;
public static int VarI
{
get { return v_VarI; }
set { v_VarI = value; }
}
private static int v_VarJ = 0;
public static int VarJ
{
get { return v_VarJ; }
set { v_VarJ = value; }
}
}
class Program
{
public class TcpTimeClient
{
private const int portNum = 6666;
private const string hostName = "192.168.1.51";
private const string data = "test";
public static int Main(String[] args)
{
new SerialPortProgram();
while (Variables.VarI < 10)
{
Byte[] bytesSent = Encoding.ASCII.GetBytes(data);
try
{
TcpClient client = new TcpClient(hostName, portNum);
NetworkStream ns = client.GetStream();
byte[] bytes = new byte[1024];
ns.Write(bytesSent, 0, bytesSent.Length);
int bytesRead = ns.Read(bytes, 0, bytes.Length);
client.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Variables.VarI++;
while (Variables.VarJ < Variables.VarI)
{
}
}
Console.ReadLine();
return 0;
}
}
public class SerialPortProgram
{
public SerialPort receiveport = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One);
public SerialPortProgram()
{
receiveport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
receiveport.Open();
}
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Show all the incoming data in the port's buffer
string rec_data = receiveport.ReadExisting();
Console.WriteLine(rec_data);
Variables.VarJ++;
}
}
}
Обновление Я обнаружил, что программа, которую я написал, и putty, а также другая программа с именем Serial Port Monitor отличаются по IOCTL_SERIAL_SET_WAIT_MASK.
Serial Port Monitor: 0x00 00 01 19Замазка: неизвестнаСобственная программа: 0x00 00 01 FB
Кто-нибудь знает, как изменить эту маску?Потому что его нет в классе System.IO.Ports.SerialPort.