服务器如何知道它想要与之通信的特定客户端的地址

本文关键字:通信 地址 客户端 何知道 服务器 | 更新日期: 2023-09-27 18:17:01

有一个服务器和多个客户端。服务器接受来自多个客户机的连接请求。创建的套接字存储在一个数组中。在我的申请中有一个列表框。在选择一个特定的项时,它指的是套接字数组中相应的套接字(例如,如果我选择第一个项,它将考虑数组中的第一个套接字)。但问题是,由于客户端可以随机连接到服务器,如果它必须向特定客户端发送数据,服务器如何跟踪客户端。下面是我的代码:

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        int i=0;
        TcpListener listener = new TcpListener(8888);
        listener.Start();
        while(true)
        {
            Socket soc = listener.AcceptSocket();
            socarray[i] = soc;
            i++;
            if (i == NUMBEROFCLIENTS)
                break;

        }

       // Thread writetodatabase = new Thread(datawrite);
      //  writetodatabase.Start();
        Application.Run(new Form1());

    }
      private void button5_Click(object sender, EventArgs e)
    {
        if (listBox1.Text == "Reader1")
        {
            reader_flag = 1;
            toolStripStatusLabel1.Text = "reader1 selected";
            a = toolStripStatusLabel1.Text;
        }
        if (listBox1.Text == "Reader2")
        {
            reader_flag = 2;
            toolStripStatusLabel1.Text = "reader2 selected";
            a = toolStripStatusLabel1.Text;
        }
     }

          namespace WindowsFormsApplication1
     {
           public partial class Form1 : Form
         {
            string a;
            public static int reader_flag = 0;
              public Form1()
             {
                InitializeComponent();
              }
            private void Form1_Load(object sender, System.EventArgs e)
          {

            }

      private void button2_Click(object sender, EventArgs e)
     {
        Form3 formmm = new Form3();
        formmm.Show();
     }

    private void button4_Click(object sender, EventArgs e)
    {
        Form2 formm = new Form2();
        formm.Show();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            byte[] bytesFrom = new Byte[1000];
            Program.socarray[0].Receive(bytesFrom);
            char[] stuffed =  System.Text.Encoding.UTF8.GetString(bytesFrom).ToCharArray();
            int i;
            char escape='@';
            List<char> unstuffed = new List<char>();
             for(i=0;i<stuffed.Length;i++)
             {
              if(stuffed[i]==escape)
                {
                   i++;
                   unstuffed.Add(stuffed[i]);
                 }
               else
                {
                 unstuffed.Add(stuffed[i]);
                }
              }
                  unstuffed.RemoveAt(0);
                  unstuffed.RemoveAt(unstuffed.Count-1);

                  char[] final;
                  final = unstuffed.ToArray();
                  string foo = new string(final);
                  textBox1.Text = foo;

System.IO.File.WriteAllText(@"C:'Users'cdac'Desktop'server'server'TextFile2.txt", foo);
                 }
           finally { }
             }
            private void textBox1_TextChanged(object sender, EventArgs e)
             {
             }
       private void button3_Click(object sender, EventArgs e)
       {
        Form4 mm = new Form4();
        mm.Show();
       }
        private void toolStripStatusLabel1_Click(object sender, EventArgs e)
      {
          toolStripStatusLabel1.Text = a;
      }
      private void button5_Click(object sender, EventArgs e)
      {
        if (listBox1.Text == "Reader1")
        {
            reader_flag = 1;
            toolStripStatusLabel1.Text = "reader1 selected";
            a = toolStripStatusLabel1.Text;
        }
        if (listBox1.Text == "Reader2")
        {
            reader_flag = 2;
            toolStripStatusLabel1.Text = "reader2 selected";
            a = toolStripStatusLabel1.Text;
        }
    }
    private void button6_Click(object sender, EventArgs e)
    {
        string MyConString = "server=localhost;" +
               "database=cdac;"+
               "User Id=root;"
               +"password=cdac56;";
            MySqlConnection connection = new MySqlConnection(MyConString);
            MySqlCommand command = connection.CreateCommand();
            MySqlDataReader Reader;
            connection.Open();
               //StreamReader reader = new StreamReader("C:''tag_log_030610.txt");
               StreamReader reader = new StreamReader("C:''Users''cdac''Desktop''server''server''TextFile2.txt");
               string line;
                while ((line = reader.ReadLine()) != null)
                {
                    string[] parts = line.Split(';');
                   //command.CommandText = "insert into st_attn(rollno,Th_attn,Name) values('" + parts[0] + "','" + parts[1] + "','" + parts[2] + "')";
                    command.CommandText = "insert into st_attn(rollno) values('" + parts[0] + "')";

                    Reader = command.ExecuteReader();
                }


            }
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    }

    }
}

服务器如何知道它想要与之通信的特定客户端的地址

客户端-服务器应用程序总是以客户端向服务器发送请求开始。无论是商业应用、游戏、网站、网络服务,甚至是报时,客户端总是首先询问服务器。

这意味着如果您使用套接字,您将始终必须让请求来自客户端。他将向服务器发送请求。然后,服务器将在内部保存在哪里可以找到客户端的记录。这保存在Socket的Endpoint属性中。但通常情况下,你不必担心这个,除非你使用的是推送应用。