0

私はC#プログラミングが初めてです。これまでのところ、単一のサーバー/単一のクライアントがありますが、それを単一のサーバー/複数のクライアントに変える必要があります。これが私のコードです:

タンクサーバー

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using System.Threading.Tasks;
     using System.Net;
     using System.Net.Sockets;
     using System.Threading;

    namespace TankServer
    {
      class Program
    {
        static Socket sck;
        static Socket acc;
        static int port = 1700;
        static IPAddress ip;
        static Thread rec;
        static string name;

        static string GetIp()
        {
            string strHostName = System.Net.Dns.GetHostName();
            IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
            IPAddress[] addr = ipEntry.AddressList;
            return addr[addr.Length - 1].ToString();
        }


        static void recV()
        {
            while (true)
            {
                Thread.Sleep(500);
                byte[] Buffer = new byte[255];
                int rec = acc.Receive(Buffer, 0, Buffer.Length, 0);
                Array.Resize(ref Buffer, rec);
                Console.WriteLine(Encoding.Default.GetString(Buffer));
            }
        }

        static void Main(string[] args)
        {
            rec = new Thread(recV);
            Console.WriteLine("Your Local Ip is : " + GetIp());
            Console.WriteLine("Please enter yout name");
            name = Console.ReadLine();
            Console.WriteLine("Please Enter Your Host Port");
            string inputPort = Console.ReadLine();
            try { port = Convert.ToInt32(inputPort); }
            catch { port = 1700; }

            ip=IPAddress.Parse(GetIp());
            sck= new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            sck.Bind(new IPEndPoint(ip, port));
            sck.Listen(0);
            acc=sck.Accept();
            rec.Start();

            while(true){
                byte[] sdata=Encoding.ASCII.GetBytes("<"+name+">"+Console.ReadLine());
                acc.Send(sdata,0,sdata.Length,0);
            }
        }
    }
}

タンククライアント

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Net;
 using System.Net.Sockets;
 using System.Threading;

 namespace TankClient
 {
  class Program
  {
    static string name = "";
    static int port = 1700;
    static IPAddress ip;
    static Socket sck;
    static Thread rec;

    static void recV()
    {
        while (true)
        {
            Thread.Sleep(500);
            byte[] Buffer = new byte[255];
            int rec = sck.Receive(Buffer, 0, Buffer.Length, 0);
            Array.Resize(ref Buffer, rec);
            Console.WriteLine(Encoding.Default.GetString(Buffer));
        }
    }

    static void Main(string[] args)
    {

        rec = new Thread(recV);
        while(true){
        Console.WriteLine("Please enter your name");
        name = Console.ReadLine();
        Console.WriteLine("Please enter the ip of the server");
        ip = IPAddress.Parse(Console.ReadLine());
        Console.WriteLine("Please Enter The Port");
        string inputPort = Console.ReadLine();
        try { port = Convert.ToInt32(inputPort); }
        catch { port = 1700; }

        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        sck.Connect(new IPEndPoint(ip, port));
        rec.Start();
        byte[] conmsg = Encoding.Default.GetBytes("<" + name + ">" + "Connected");
        sck.Send(conmsg, 0, conmsg.Length, 0);

        while (sck.Connected)
        {
            byte[] sdata = Encoding.Default.GetBytes("<" + name + ">"+Console.ReadLine());
            sck.Send(sdata, 0, sdata.Length, 0);
        }
    }
  }
 }
  }

ネットで調べたのですが、やり方がよくわかりません。

4

2 に答える 2