我正在尝试在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());
}
}
}
}
}
}