using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace GameServerForm { public partial class GameServerForm : Form { private int port = 10; //Port number private static int MAX_CLIENTS = 4; private ServerThread[] clientList = new ServerThread[MAX_CLIENTS]; private Thread[] clientThreads = new Thread[MAX_CLIENTS]; private int numberOfPlayersToConnect; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); public GameServerForm() { InitializeComponent(); numberOfClientsLabel.Text = "Number of connected clients: 0"; } private delegate void DisplayDelegate(int clientCount); private void updateClientCountLabel(int clientCount) { numberOfClientsLabel.Text = "Number of connected clients: " + clientCount; } private void launchServerButton_Click(object sender, EventArgs e) { numberOfPlayersToConnect = (int)clientNumberInput.Value; try { TcpListener server = new TcpListener(localAddr, port); // Start listening for client requests. server.Start(); int clientID = 0; int clientCount = 0; while (clientID < numberOfPlayersToConnect) { TcpClient socketForClient = server.AcceptTcpClient(); Invalidate(true); if (socketForClient.Connected) { clientCount++; numberOfClientsLabel.Invoke(new DisplayDelegate(updateClientCountLabel),new object[] {clientCount}); //numberOfClientsLabel.Text = "Number of connected clients: " + clientCount; ServerThread listenerThread = new ServerThread(socketForClient, clientID); Thread thread = new Thread(new ThreadStart(listenerThread.runServerThread)); clientList[clientID] = listenerThread; clientThreads[clientID] = thread; clientID++; thread.Start(); } } } catch (SocketException ex) { Console.WriteLine("SocketException: {0}", ex); } infoTextbox.Text = "Aborting threads"; for (int i = 0; i < numberOfPlayersToConnect; i++) clientThreads[i].Abort(); } } class ServerThread { private TcpClient client; private int clientID; private StreamWriter writer; private StreamReader reader; public ServerThread(TcpClient _client, int _clientID) { client = _client; clientID = _clientID; NetworkStream networkStream = client.GetStream(); writer = new System.IO.StreamWriter(networkStream); reader = new System.IO.StreamReader(networkStream); } public void runServerThread() { sendMessage("Message from listener " + clientID); sendMessage("win"); while (true) { } } public void sendMessage(String message) { writer.WriteLine(message); writer.Flush(); } public string getMessage() { string message = reader.ReadLine(); return message; } } }