Я искал ответ без везения. Программа представляет собой простое приложение для чата, которое либо слушает, либо говорит. Соединение устанавливается между клиентом и сервером, но когда я отправляю сообщение, другое, похоже, не получает его.Как получать сообщения от потока?
сервер ждет подключения
private void ListenForConnection(IPAddress ipAddress)
{
tcpListener = new TcpListener(ipAddress, portNumber);
tcpListener.Start();
client = tcpListener.AcceptTcpClient();
stream = client.GetStream();
stream.ReadTimeout = 200;
}
клиент подключения
private void EstablishConnection(IPAddress ipAddress)
{
client = new TcpClient();
client.Connect(ipAddress, portNumber);
stream = client.GetStream();
stream.ReadTimeout = 200;
}
клиент написания сообщения
public void SendMessage(String message)
{
StreamWriter networkWriter = new StreamWriter(stream);
networkWriter.Write(message);
networkWriter.Flush();
}
сервер читает сообщение
public String ListenForMessage()
{
String networkRead = String.Empty;
try
{
networkRead = new StreamReader(stream).ReadToEnd();
}
catch (Exception e) { }
return networkRead;
}
Отправка и получение идентичны для сервера и клиента. Я собираюсь добавить обработку ошибок больше, когда сообщения работают.
Мне интересно, что, возможно, есть проблема с моей связью. В настоящее время я запускаю 2 экземпляра чат-программы на своей машине, один сервер один клиент. Клиент подключается на 127.0.0.1 (localhost) на порту 8080, когда сервер прослушивает порт 8080. Однако клиент не подключается к 192.168.1.100, который является фактическим ip-адресом моего компьютера, но не уверен, что это может что-то указать.
EDIT: скорректировал запись и чтение использовать потоковый писатель и читатель и флеш
Вам нужно узнать о сети. 'TcpClient' и TCP/IP в целом работают на потоках байтов. Если вы хотите навязать структуру сообщений, вам нужно сделать это самостоятельно. Например, может предшествовать каждому сообщению количество байтов в сообщении. Клиент будет считывать количество байтов, а затем читать следующие «n» байты в качестве сообщения. –
@Saunders Я также пытался использовать StreamReader и StreamWriter, потому что это похоже на структуру сообщений ipoped, но мне не повезло – Centimane
Нет структуры сообщений, если вы не навязываете ее. –