Nejčastěji odpovídající uživatel
TCP/IP komunikace a problém s odpovědí serveru

Dotaz
-
Dobrý den,
vyvíjím aplikaci využívající TCP/IP protokol na bázi klient-server na každém stroji.
Plánovaná komunikace:
1) na 1. a 2. stroji se spustí server a klient.
2) uživatel 1. stroje zadá IP 2. stroje, klient na 1. stroji se připojí na server 2. stroje, ten pak pošle poslaná data klientu 2. stroje( tedy na ten samý počítač) a naopak.
Po každém spojení klienta se servrem a předání dat se server zastaví a čeká na další spojení.
A teď k jádru problému: při připojování na "localhost" mi celá sestava v pořádku běží, ale při připojování na jiný počítač se objeví chyba: cílový počítač neodpověděl v časovém limitu.
Pozn.: Prakticky všechen kód jsem použil z MSDN Library.
Code Snippetpublic void RunServer()
{
TcpListener server = null;
String data = null;
try
{
// Set the TcpListener on port 13000. Int32 port = 80; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); // TcpListener server = new TcpListener(port);server =
new TcpListener(localAddr, port); // Start listening for client requests.server.Start();
// Buffer for reading data Byte[] bytes = new Byte[256]; // Enter the listening loop. while (true){
Console.Write("SERVER: Waiting for a connection... "); // Perform a blocking call to accept requests. // You could also user server.AcceptSocket() here. TcpClient client = server.AcceptTcpClient(); Console.WriteLine("SERVER: Connected!");data =
null; // Get a stream object for reading and writing NetworkStream stream = client.GetStream(); int i; // Loop to receive all the data sent by the client. while ((i = stream.Read(bytes, 0, bytes.Length)) != 0){
// Translate data bytes to a ASCII string.data = System.Text.
Encoding.Unicode.GetString(bytes, 0, i); Console.WriteLine("SERVER: Received: {0}", data); // Process the data sent by the client. // data = data.ToUpper();}
// Shutdown and end connectionclient.Close();
}
}
catch (SocketException e){
Console.WriteLine("SocketException: {0}", e);}
finally{
// Stop listening for new clients.server.Stop();
try{
Connect(ip, data);
Console.WriteLine("SERVER: Sent: {0}", data);}
catch (Exception ex){
Console.WriteLine(ex); }}
}
{
try{
// Create a TcpClient. // Note, for this client to work you need to have a TcpServer // connected to the same address as specified by the server, port // combination. Int32 port = 80; TcpClient client = new TcpClient(server, port); // Translate the passed message into ASCII and store it as a Byte array. Byte[] data = System.Text.Encoding.Unicode.GetBytes(message); // Get a client stream for reading and writing. // Stream stream = client.GetStream(); NetworkStream stream = client.GetStream(); // Send the message to the connected TcpServer.stream.Write(data, 0, data.Length);
Console.WriteLine("CLIENT: Sent: {0}", message); // Receive the TcpServer.response. // Buffer to store the response bytes.data =
new Byte[256]; // String to store the response ASCII representation. String responseData = String.Empty; // Read the first batch of the TcpServer response bytes. Int32 bytes = stream.Read(data, 0, data.Length);responseData = System.Text.
Encoding.Unicode.GetString(data, 0, bytes); Console.WriteLine("CLIENT: Received: {0}", responseData); // Close everything.stream.Close();
client.Close();
}
catch (ArgumentNullException e){
Console.WriteLine("ArgumentNullException: {0}", e);}
catch (SocketException e){
Console.WriteLine("SocketException: {0}", e);}
}
Můžete mi někdo pls poradit, jak tento problém vyřešit, popřípadě pokud máte s touto oblastí nějaké zkušenosti, nastínit jiné řešení problému, i s jinou konstrukcí?
Díky moc za každou radu.