2015-11-21 2 views
0
private void button1_Click(object sender, EventArgs e) 
    { 
     TcpClient joao = new TcpClient("localhost", Convert.ToInt32(25565)); 
     MessageBox.Show(joao.Client.LocalEndPoint.ToString()); 
     NetworkStream ns = joao.GetStream(); 
     byte[] outbytes = Encoding.ASCII.GetBytes(textBox1.Text); 
     ns.Write(outbytes, 0, outbytes.Length); 
     richTextBox1.AppendText("Sent : " + Encoding.ASCII.GetString(outbytes)); 
     ns.Close(); 
     joao.Close(); 
    } 

Итак, это код, который я написал для клиента C#. Проблема в том, что вывод messageBox «127.0.0.1:52296», и он продолжает меняться, когда я отправляю больше сообщений на сервер. Разве это не "127.0.0.1:25565"? Когда я пытаюсь сделать это через Интернет он doesnt't работатьC# Клиентский порт отличается от указанного

+0

'joao.Client.LocalEndPoint.ToString()' должно быть как 'joao.Client.LocalEndPoint.Port.ToString()' – davidbaumann

+0

Этого не существует, я думаю:/Он не содержит определения для «Порт " –

ответ

0

проверяя определение TcpClient() перегрузки вы используете, вы определяете порт назначения в качестве , означает подключение к этому удаленному порту.

Client объект, в котором вы находитесь, является на самом деле Socket, который имеет объект недвижимости LocalEndPoint. Теперь вы можете задать этот объект EndPoint об его Port.


О том, почему данная EndPoint.Port постоянно меняется:

Это своего рода о том, как TCP stack работает, если вы не повторно использовать этот сокет будет поддерживать изменения, это нормально.

1

При инициализации TcpClient с адресом и портом, необходимо указать хост вы хотите подключиться: MSDN link

Так порт вашего целевого хоста всегда будет 25565, но порт клиент использует для достижения хоста может изменять (выбирает случайный доступный порт).

Смежные вопросы