Hi all,
I wrote these two classes to simplify network communication a bit. It seems to work (only transfers strings atm) except one day it stopped working all together and im not sure why.
Any constructive Criticism would be greatly appreciated.
using System;
using System.Collections.Generic;
using System.Text;
namespace MyNameSpace
{
using System;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Windows.Forms;
public class ServerSocket
{
private TcpListener myListener;
private int port = 4000;
private Thread listenerThread;
private Socket Client;
private bool keepListening=false;
public ServerSocket(int port)
{
this.port = port;
}
public void setPort(int port)
{
this.port = port;
}
public void start()
{
try
{
this.keepListening = true;
myListener = new TcpListener(port);
myListener.Start();
listenerThread = new Thread(new ThreadStart(listen));
listenerThread.Start();
}
catch (Exception e) { }
}
public void stop()
{
this.keepListening = false;
myListener.Stop();
listenerThread.Abort();
}
public void listen()
{
while (this.keepListening)
{
try
{
Client = myListener.AcceptSocket();//Catch Socket Exception
}
catch (SocketException) { }
if (Client.Connected)
{
//MessageBox.Show("Client Connected!!");
try
{
while (Client.Connected && this.keepListening)
{
Byte[] receive = new Byte[64];
int i = Client.Receive(receive, receive.Length, 0);
char[] unwanted = { ' ', ' ', '\0' };
recieveText(System.Text.Encoding.ASCII.GetString(receive).TrimEnd(unwanted));
}
}
catch (SocketException e)
{
Client.Disconnect(true);
}
}
Thread.Sleep(500);
}
}
public void sendText(string text)
{
Byte[] byteDateLine = System.Text.Encoding.ASCII.GetBytes(text.ToCharArray());
Client.Send(byteDateLine, byteDateLine.Length, 0);
}
public void recieveText(string text)
{
string sendText = "ERROR - Unrecognised Command";
if (text.Equals("SayHello:"))
sendText = "Hello Dude!";
this.sendText(sendText);
}
}
}
public class ClientSocket
{
private TcpClient Server;
private int port = 4554;
private string ip;
private bool readData = false;
public ClientSocket(string ip, int port)
{
this.ip = ip;
this.port = port;
}
public bool connect()
{
try
{
Server = new TcpClient(this.ip, this.port);
return true;
}
catch (Exception e) { return false; }
}
public void disconnect()
{
Server.Close();
}
public string sendRequest(string request)
{
if (Server!=null&&Server.Connected == true)
{
string returnString = "";
NetworkStream nts = Server.GetStream();
if (nts.CanWrite)
{
Byte[] sends = System.Text.Encoding.ASCII.GetBytes(request.ToCharArray());
nts.Write(sends, 0, sends.Length);
nts.Flush();
}
readData = false;
while (!readData && nts.CanRead)
{
//if data available then read from the stream
if (nts.DataAvailable)
{
byte[] rcd = new byte[128];
int i = nts.Read(rcd, 0, 128);
char[] unwanted = { ' ', ' ', ' ' };
returnString = System.Text.Encoding.ASCII.GetString(rcd).TrimEnd(unwanted);
readData = true;
}
}
return returnString;
}
return "Error - Not connected to server";
}
}