usiłuje zrobić prosty program klient serwer wysyłający wiadomości tekstowe. Udało mi się aby klient wysyłał wiadomość do serwera a ten ją odczytywał ale chce żeby możliwa była wymiana wiadomości.Próbowałem do tego celu użyć drugiego wątka ale niestety, mój kod:
serwer:
static byte[] buffer { get; set; }
static Socket sck, acctepted;
static Thread watek;
static void Main(string[] args)
{
watek = new Thread(funckjaWatka);
watek.Start();
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sck.Bind(new IPEndPoint(0, 8000));
sck.Listen(100);
acctepted = sck.Accept();
while (true)
{
buffer = new byte[acctepted.SendBufferSize];
int bytesRead = acctepted.Receive(buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = buffer[i];
}
string data = Encoding.ASCII.GetString(formatted);
if (data.EndsWith("close")) break;
Console.WriteLine(data);
}
Console.WriteLine("Klient zakończył połączenie");
Console.Read();
watek.Abort();
}
static void funckjaWatka()
{
while (true)
{
string text = Console.ReadLine();
text = "Serwer: " + text;
byte[] data = Encoding.ASCII.GetBytes(text);
acctepted.Send(data);
}
}
klient:
static Socket sck;
static Thread watek;
static void Main(string[] args)
{
Console.Write("imie:");
string imie = Console.ReadLine();
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
watek = new Thread(funkcjaWatka);
while (true)
{
try
{
sck.Connect("127.0.0.1", 8000);
break;
}
catch
{
Console.WriteLine("blad polaczenia, probujemy ponownie ... ;)");
}
}
while (true)
{
string text = Console.ReadLine();
text = imie + ": " + text;
byte[] data = Encoding.ASCII.GetBytes(text);
sck.Send(data);
if (text.EndsWith("close")) break;
}
watek.Abort();
sck.Close();
Console.Read();
}
static void funkcjaWatka()
{
while (true)
{
sck.Listen(100);
byte[] buffer = new byte[sck.SendBufferSize];
int bytesRead = sck.Receive(buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = buffer[i];
}
string data = Encoding.ASCII.GetString(formatted);
Console.WriteLine(data);
}
}