Я делаю небольшое серверное приложение, использующее протокол TCP. Он уже может sh устанавливать соединение между несколькими клиентами. Проблема в том, что работает локально. Поэтому мне интересно, как я могу получить IP-адрес хоста и заставить сервер принимать клиентские соединения через Inte rnet?
public static class Server
{
static Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
static int nextID = 1;
static List<Socket> clients = new List<Socket>(5);
static MemoryStream stream = new MemoryStream(new byte[256], 0, 256, true, true);
static BinaryReader reader = new BinaryReader(stream);
static BinaryWriter writer = new BinaryWriter(stream);
public static void Init()
{
Console.Title = "Server";
socket.Bind(new IPEndPoint(IPAddress.Any, 8080));
socket.Listen(0);
socket.BeginAccept(AcceptCallBack, null);
Console.ReadLine();
}
static void AcceptCallBack(IAsyncResult ar)
{
Socket client = socket.EndAccept(ar);
clients.Add(client);
Thread thread = new Thread(HandleClient);
thread.Start(client);
socket.BeginAccept(AcceptCallBack, null);
}
static void HandleClient(object obj)
{
Socket client = (Socket)obj;
while(true)
{
stream.Position = 0;
client.Receive(stream.GetBuffer());
int code = reader.ReadInt32();
switch(code)
{
case 0:
writer.Write(nextID++);
socket.Send(stream.GetBuffer());
break;
case 1:
foreach (Socket cl in clients)
if (cl != client)
cl.Send(stream.GetBuffer());
break;
}
}
}
}