As a side project, I'm working on a turn-based game. My plan was to simply send a string from one player to another describing the previous action taken. IE "Bob,MoveX,5,MoveY,3,END;"
I have a simple program which sends strings back and forth, but it requires that each side alternate sending, which won't work for me. Here are the 2 files.
Server:
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
public class ServerSocket1
{
public static void Main()
{
try
{
bool status = true;
string servermessage = "";
string clientmessage = "";
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
TcpListener tcpListener = new TcpListener(localAddr, 8100);
tcpListener.Start();
Console.WriteLine("Server Started");
Socket socketForClient = tcpListener.AcceptSocket();
Console.WriteLine("Client Connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
StreamWriter streamwriter = new StreamWriter(networkStream);
StreamReader streamreader = new StreamReader(networkStream);
while (status)
{
if (socketForClient.Connected)
{
servermessage = streamreader.ReadLine();
Console.WriteLine("Client:" + servermessage);
if ((servermessage == "bye"))
{
status = false;
streamreader.Close();
networkStream.Close();
streamwriter.Close();
return;
}
Console.Write("Server:");
clientmessage = Console.ReadLine();
streamwriter.WriteLine(clientmessage);
streamwriter.Flush();
}
}
streamreader.Close();
networkStream.Close();
streamwriter.Close();
socketForClient.Close();
Console.WriteLine("Exiting");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
Client:
using System;
using System.Net.Sockets;
using System.IO;
public class ClientSocket1
{
static void Main(string[] args)
{
TcpClient socketForServer;
bool status = true;
try
{
socketForServer = new TcpClient("localhost", 8100);
Console.WriteLine("Connected to Server");
}
catch
{
Console.WriteLine("Failed to Connect to server{0}:999", "localhost");
return;
}
NetworkStream networkStream = socketForServer.GetStream();
StreamReader streamreader = new StreamReader(networkStream);
StreamWriter streamwriter = new StreamWriter(networkStream);
try
{
string clientmessage = "";
string servermessage = "";
while (status)
{
Console.Write("Client:");
clientmessage = Console.ReadLine();
if ((clientmessage == "bye") || (clientmessage == "BYE"))
{
status = false;
streamwriter.WriteLine("bye");
streamwriter.Flush();
}
if ((clientmessage != "bye") && (clientmessage != "BYE"))
{
streamwriter.WriteLine(clientmessage);
streamwriter.Flush();
servermessage = streamreader.ReadLine();
Console.WriteLine("Server:" + servermessage);
}
}
}
catch
{
Console.WriteLine("Exception reading from the server");
}
streamreader.Close();
networkStream.Close();
streamwriter.Close();
}
}
I plan to add plenty of functionality, but would like to sort out why I need to alternate who sends.
Note: The game only supports 2 players, so I can safely assume there will be one host (server) and one client.