Hallo Leute,
ich schreibe meine Sachen fast ausschließlich in Flex und php.
Nun geht es nicht mehr und ich habe angefangen mich mit C# zu beschäftigen.
Der Socket funktioniert.
Ich kann von Flex aus connectieren und das Echo empfangen.
Super.
Nur das einfachste bekomme ich nicht gebacken.
Vermutlich habe ich hier noch ein Verständnisproblem.
Ich bekomme schon keine Instanzt vom seriellen Port!
ich schreibe meine Sachen fast ausschließlich in Flex und php.
Nun geht es nicht mehr und ich habe angefangen mich mit C# zu beschäftigen.
Der Socket funktioniert.
Ich kann von Flex aus connectieren und das Echo empfangen.
Super.
Nur das einfachste bekomme ich nicht gebacken.
Vermutlich habe ich hier noch ein Verständnisproblem.
Ich bekomme schon keine Instanzt vom seriellen Port!
PHP Code:
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Diagnostics;
using System.IO.Ports;
namespace TcpSock
{
class TcpSock
{
//static SerialPort _serialPort;
//_serialPort = new _serialPort();
//_serialPort = new _serialPort("COM3", 9600, Parity.None, 8, StopBits.One);
int tcpIndx = 0;
int tcpByte = 0;
byte[] tcpRecv = new byte[1024];
public Socket tcpSock;
public int Recv(ref string tcpRead)
{
tcpByte = tcpSock.Available;
if (tcpByte > tcpRecv.Length - tcpIndx)
tcpByte = tcpRecv.Length - tcpIndx;
tcpByte = tcpSock.Receive(tcpRecv, tcpIndx, tcpByte,SocketFlags.Partial);
tcpRead = Encoding.ASCII.GetString(tcpRecv, tcpIndx, tcpByte);
tcpIndx += tcpByte;
return tcpRead.Length;
}
public int RecvLn(ref string tcpRead)
{
tcpRead = Encoding.ASCII.GetString(tcpRecv, 0, tcpIndx);
tcpIndx = 0;
return tcpRead.Length;
}
public int Send(string tcpWrite)
{
return tcpSock.Send(Encoding.ASCII.GetBytes(tcpWrite));
}
public int SendLn(string tcpWrite)
{
return tcpSock.Send(Encoding.ASCII.GetBytes(tcpWrite + "\r\n"));
}
}
class Tcp
{
[STAThread]
static void Main()
{
IPHostEntry Iphe = Dns.Resolve(Dns.GetHostName());
//string myHost = Dns.GetHostName();
//IPHostEntry Iphe = Dns.GetHostByName(Dns.GetHostName).AddressList(0).ToString();
IPEndPoint Ipep = new IPEndPoint(Iphe.AddressList[0], 4444);
Socket Server = new Socket(Ipep.Address.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
ArrayList Client = new ArrayList();
string rln = null;
Client.Capacity = 256;
Server.Blocking = false;
Server.Bind(Ipep);
Server.Listen(32);
Console.WriteLine("{0}: listening to port {1}", Dns.GetHostName(),Ipep.Port);
////////////////////////////////////////////////////////////////////////////////////////////
///Main loop
///1. Poll the Server TcpSock; if true then accept the new connection.
///2. Poll the Client TcpSock; if true then receive data from Clients.
while (true)
{
//Accept
if (Server.Poll(0, SelectMode.SelectRead))
{
int i = Client.Add(new TcpSock());
((TcpSock)Client[i]).tcpSock = Server.Accept();
((TcpSock)Client[i]).SendLn("Welcome");
Console.WriteLine("Client {0} connected.", i);
}
for (int i = 0; i < Client.Count; i++)
{
//check for incoming data
if (((TcpSock)Client[i]).tcpSock.Poll(0, SelectMode.SelectRead))
{
//receive incoming data
if (((TcpSock)Client[i]).Recv(ref rln) > 0)
{
//echo incoming data
((TcpSock)Client[i]).Send(rln);
//Debug.Write(rln);
if (rln.Substring(0, 3) == "set")
{
Debug.Write("set");
// hier daten an comport senden
}
if (rln.Substring(0, 3) == "get")
{
Debug.Write("get");
//hier daten via socket an flex zurück
// string message = _serialPort.ReadLine()
//((TcpSock)Client[i]).Send(message);
}
/*
//check for new line
if (rln == "\r\n")
{
///receive line
((TcpSock)Client[i]).RecvLn(ref rln);
//send the line to all clients
for (int y = 0; y < Client.Count; y++)
if (y != i)
((TcpSock)Client[y]).Send(i.ToString() + ": " + rln);
Console.Write("{0}: {1}", i, rln);
}
* */
}
//recv returned <= 0; close the socket
else
{
((TcpSock)Client[i]).tcpSock.Shutdown(SocketShutdown.Both);
((TcpSock)Client[i]).tcpSock.Close();
Client.RemoveAt(i);
Console.WriteLine("Client {0} disconnected.", i);
}
}
}
}
}
}
}
Comment