I’ve done a simple ASPX page with just one <asp:Button>. This page will do a connection with a Windows Form application via Socket.
How Should Work
Everytime that I click in my <asp:Button> I have to pass some information to my Windows Form read, and then I will print it.
TCP Server Code
public partial class PaginaTeste : System.Web.UI.Page
{
private TcpListener tcpListener;
private Thread listenThread;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnBotao_OnClick(object sender, EventArgs e)
{
this.tcpListener = new TcpListener(IPAddress.Any, 8849);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
}
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
TcpClient client = this.tcpListener.AcceptTcpClient();
//create a thread to handle communication
//with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
string serverResponse = "571764;10.";
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
clientStream.Write(sendBytes, 0, sendBytes.Length);
clientStream.Flush();
}
catch
{
//a socket error has occured
break;
}
if (bytesRead == 0)
{
//the client has disconnected from the server
break;
}
}
tcpClient.Close();
}
Client Code (Windows Form)
public partial class Form1 : Form
{
TcpClient clientsocket2;
Thread thread;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button3_click(object sender, EventArgs e)
{
this.clientsocket2 = new TcpClient();
clientsocket2.Connect("server_ip", 8849);
this.thread = new Thread(new ThreadStart(this.imprimir));
this.thread.Start();
}
protected void imprimir()
{
NetworkStream serverStream = clientsocket2.GetStream();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)clientsocket2.ReceiveBufferSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
string r = "Printing Test";
int retorno = -1;
retorno = IniciaPorta("COM7");
if (retorno == 1)
{
ConfiguraModeloImpressora(7);
BematechTX(r);
AcionaGuilhotina(1);
FechaPorta();
}
clientSocket.Close();
}
Problem
If I click once in my <asp:Button> and initiallize my Client Application works fine. In the second time that I click in my <asp:Button> the parameter that I pass to my Client Application return empty.
Where I read empty in my client application
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
Why you create tcpListener when press button in your page?
You need create TcpClient and send comand to you Winform App
This code send comand and get reply from server
Thats all