c#中串口到串口的简单代码

时间:2016-03-30 10:52:08

标签: c# winforms sockets serial-port

我正在尝试在c#中编写一个简单的代码,用于从串口读取字节流并将其写入套接字端口..到目前为止,我已经完成了直到这里,但我害怕我是新手,有点困难是任何人都可以纠正我的代码并教我。请做好。

服务器端似乎正在工作但是,客户端没有来自串口的数据,即使我正在发送数据。是正确的流程。

我的代码

/// portservr

客户端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.IO.Ports;

namespace serverpgm2console
{
    class Program
    {
        private string datarecieved;
        public static SerialPort port = new SerialPort(); // initialzation of serial port
        public static    int dataserialrecieved;
        public static int once = 0;
       static void Main(string[] args)
        {
          //  portInitialization();
            TcpListener serverSocket = new TcpListener(80); //listening to server socket
            TcpClient clientSocket = default(TcpClient);
            int counter = 0;

            serverSocket.Start();
            Console.WriteLine(" >> " + "Server Started"); 

            counter = 0;
            while (true)
            {
                counter += 1;
                clientSocket = serverSocket.AcceptTcpClient();  //accept server connection
                Console.WriteLine(" >> " + "Client No: " + Convert.ToString(counter) + " started!");
                handleClinet client = new handleClinet();
                client.startClient(clientSocket, Convert.ToString(counter));


            }

            clientSocket.Close();
            serverSocket.Stop();
            Console.WriteLine(" >> " + "exit");
            Console.ReadLine();
        }


       //Class to handle each client request separatly
       public class handleClinet
       {
           TcpClient clientSocket;
           string clNo;
           public void startClient(TcpClient inClientSocket, string clineNo)
           {
               this.clientSocket = inClientSocket;
               this.clNo = clineNo;

               //Thread ctThread = new Thread(doChat);
              // ctThread.Start();
               doChat();
           }

           public void doChat()
           {


               if (once == 0)
               {
                   ini();   //open serial port only once.
                       once = 1;
               }


           }
           public void ini()
           {
               port.PortName ="COM12";
               port.BaudRate = 38400;
               port.Parity = Parity.None;
               port.StopBits = StopBits.One;
               port.Handshake = Handshake.None;
               port.DataBits = 8;
               port.Open();

               port.DataReceived += new SerialDataReceivedEventHandler(port_datarecevied);
           }


           private void port_datarecevied(object sender, SerialDataReceivedEventArgs e)
           {

                   dataserialrecieved = port.BytesToRead; // recevied data from port
                   this.Invoke(new EventHandler(SendToClient)); //invoke event , but invoke method is not working here as it tell no method for invoke


           }

           public void SendToClient(object sender, EventArgs e)
           {

               int requestCount = 0;
               byte[] bytesFrom = new byte[10025];
               string dataFromClient = null;
               Byte[] sendBytes = null;
               string serverResponse = null;
               string rCount = null;
               requestCount = 0;

               while ((true))
               {
                   try
                   {
                       requestCount = requestCount + 1;
                       NetworkStream networkStream = clientSocket.GetStream();
                       networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                       var h = bytesFrom;

                       string some = System.Text.Encoding.ASCII.GetString(bytesFrom);

                       dataFromClient = some.Substring(0, some.IndexOf("$"));
                       byte[] toBytes = Encoding.ASCII.GetBytes(dataFromClient);
                       Console.WriteLine(" >> " + "From client- " + clNo + " " + toBytes);

                       rCount = Convert.ToString(requestCount);
                       //server to client-------

                       serverResponse = "" + dataserialrecieved;             // get and send data to server....
                       sendBytes = Encoding.ASCII.GetBytes(serverResponse);
                       networkStream.Write(sendBytes, 0, sendBytes.Length);
                       networkStream.Flush();
                       Console.WriteLine(" >> " + serverResponse);
                   }
                   catch (Exception ex)
                   {
                       Console.WriteLine(" >> " + ex.ToString());
                   }
               }
           }
       } 



    }
}

0 个答案:

没有答案