хорошего дня всехC# - NetworkStream читать и писать
Я иду по некоторой сети программирования для реализации с большим приложением, но для основы, я создаю простые сетевой чат клиента-сервера приложения с помощью этого link
, что должно произойти:
При получении данных от клиента, окно сообщения, показывая сокет к компьютеру IP-адрес с портом, но
Проблема:
MessageBox, которая отображает сообщение, отправленное пуст (так называемый «»), я не понимаю, что я делаю неправильно.
Рекомендации?
было смотреть на это, но я не думаю, что это подходит для моей ситуацииnetwork stream with buffers
клиент (передает данные)
const int _PORT = 80;
public Form1()
{
InitializeComponent();
}
private void sendText(string _reciever_ip, string _MESSAGE)
{
TcpClient _sender = new TcpClient(_reciever_ip, _PORT);
try
{
Stream s = _sender.GetStream();
StreamWriter sw = new StreamWriter(s);
sw.WriteLine(_MESSAGE);
s.Close();
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
}
_sender.Close();
}
private void button2_Click(object sender, EventArgs e)
{
sendText(inputT_IP.Text, inputT_Msg.Text);
}
сервер (recieves данные)
const int _PORT = 80;
static List<string> _ipaddress_list = new List<string>();
public Form1()
{
InitializeComponent();
}
private void recieveText(string _IPADDRESS)
{
//open a listener for a tcp client, to the same for UDp client
TcpListener _reciever_client = new TcpListener(IPAddress.Parse(_IPADDRESS), _PORT); //how would you listen for a connection from any port?
_reciever_client.Start();
while (true)
{
Socket _listener_socket = _reciever_client.AcceptSocket();
try
{
MessageBox.Show("Recieving from : " + _listener_socket.RemoteEndPoint.ToString());
Stream _net_stream = new NetworkStream(_listener_socket);
StreamReader sr = new StreamReader(_net_stream);
MessageBox.Show(sr.ReadLine());
//richTextBox1.AppendText();
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
}
_listener_socket.Close();
}
}
void GetLocalIPAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
_ipaddress_list.Add(ip.ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
GetLocalIPAddress();
foreach (string item in _ipaddress_list)
{
(new Thread(() => recieveText(item))).Start();
}
}
Попробуйте изменить 's.Close();' на 'sw.Close();', который должен очистить потоковый блок и закрыть основной сокет. –
Порт 80, вероятно, заблокирован. Используйте номер порта> 10 000 – jdweng
@JoachimIsaksson. Ваш ответ правильный, пожалуйста, напишите, если для меня, чтобы принять этот ответ, почему это работает, если я могу спросить его таким образом? – KGCybeX