Задать вопрос
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..

Почему windows не принимает соединения?

Сейчас изучаю сетевое программирование. Написал(скопипастил и немного подправил) сервер и клиент на java. На ноутбуке установлен Mint(ip 192.168.1.4), на компьютере Windows XP(ip 192.168.1.6). Запускаю сервер на Linux, потом в windows 'java Client 192.168.1.4' и ввожу комманды, все работает. Но когда сервер запускаю в Windows, а в Linux пишу 'java Client 192.168.1.6', то клиент не соединяется. На XP у меня firewall отключен, антивируса нет, не пойму что может мешать?

Client.java
import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] ar) {
        int serverPort = 5000; // здесь обязательно нужно указать порт к которому привязывается сервер.
        //String address = "192.168.1.4"; // это IP-адрес компьютера, где исполняется наша серверная программа. 
                                      // Здесь указан адрес того самого компьютера где будет исполняться и клиент.
        //System.out.println(ar[0]);
        String address = ar[0];

        try {
            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
            System.out.println("Any of you heard of a socket with IP address " + address + " and port " + serverPort + "?");
            Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
            socket.setReuseAddress(true);
            System.out.println("Yes! I just got hold of the program.");

            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом. 
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);

            // Создаем поток для чтения с клавиатуры.
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            System.out.println("Type in something and press enter. Will send it to the server and tell ya what it thinks.");
            //System.out.println();

            while (true) {
                line = keyboard.readLine(); // ждем пока пользователь введет что-то и нажмет кнопку Enter.
                //System.out.println("Sending this line to the server...");
                out.writeUTF(line); // отсылаем введенную строку текста серверу.
                out.flush(); // заставляем поток закончить передачу данных.
                line = in.readUTF(); // ждем пока сервер отошлет строку текста.
                //System.out.println("The server was very polite. It sent me this : " + line);
               // System.out.println("Looks like the server is pleased with us. Go ahead and enter more lines.");
                System.out.print("->");
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
    }
}


Server.java
import java.net.*;
import java.io.*;
import java.text.*;
import java.util.*;

public class Server
{
	public static void main(String[] args)
	{
		//System.out.println("Hello");
		int port = 5000;
		try {
			ServerSocket myserver = new ServerSocket(port);
			System.out.println("Waiting for a client...");
			myserver.setReuseAddress(true);
			
			Socket socket = myserver.accept();//Ждем подключение клиента
			
			InputStream sin = socket.getInputStream();
			OutputStream sout = socket.getOutputStream();
			
			DataInputStream in = new DataInputStream(sin);
			DataOutputStream out = new DataOutputStream(sout);
			String line = null;
			System.out.println(socket.getLocalAddress());
			
			while(true)
			{
				line = in.readUTF();
				
				switch(line)
				{
				case "data":
					System.out.println("Дата");
					break;
				case "time":
					
					Date d = new Date();
					SimpleDateFormat format1 = new SimpleDateFormat("dd.MM.yyyy hh:mm");
					System.out.println(format1.format(d));
					break;
				case "exit":
					socket.close();
					break;
					
					
					
				default:
					System.out.println(line +" - Ошибка! Такой комманды нет!");
					//System.out.println("->");
				}
				
				//System.out.println(line);
				out.writeUTF(line);
				out.flush();
				
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
  • Вопрос задан
  • 2448 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Va1ery
@Va1ery
Посмотри wireshark'ом на клиенте и на сервере, есть ли нужные пакеты, устанавливается ли соединение, и приходит ли пакет с данными.
Ответ написан
Комментировать
@j_wayne
Стектрейс исключения в студию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы