Простая Программа Клиента/сервера Java

Я пишу свою первую программу клиента/сервера Java, которая просто устанавливает соединение с сервером, отправляет его, предложение и сервер отправляют предложение назад все использованные для своей выгоды. Это - на самом деле пример прямо из книги, и она работает хорошо и прекрасный, когда я выполняю клиент и сервер на той же машине и использую localhost для адреса сервера. Но когда я поместил клиентскую программу на другой компьютер, она приводит к таймауту и никогда не устанавливает связь с сервером. Я не уверен, почему это и его вид Ламе, делающего Вашу первую клиент-серверную программу и не на самом деле быть в состоянии использовать его на двух различных машинах. Вот клиентский код:

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

public class TCPClient {
    public static void main(String argv[]) throws Exception {
        String sentence;
        String modifiedSentence;
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

        Socket clientSocket = new Socket("localhost", 6789);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        sentence = inFromUser.readLine();
        outToServer.writeBytes(sentence + '\n');
        modifiedSentence = inFromServer.readLine();
        System.out.println(modifiedSentence);
        clientSocket.close();
    }
}

Вот серверный код:

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

public class TCPServer {
    public static void main(String args[]) throws Exception {
        String clientSentence;
        String capitalizedSentence;
        ServerSocket welcomeSocket = new ServerSocket(6789);

        while(true) {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = inFromClient.readLine();
            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            outToClient.writeBytes(capitalizedSentence);
        }
    }
}

Единственной вещью, которую я изменяю, когда я выполняю ее на двух различных машинах, является клиентская программа, делает ее сокет с IP-адресом машины с программой сервера (который я получил из whatismyipaddress.com). Большое спасибо за любую справку.

Обновление: Я нахожусь действительно в кампусе, и кажется что, вероятно, не разрешение мне использовать тот случайный порт. Какие-либо предложения при обнаружении, какой порт я могу использовать и или порт, который больше, чем, вероятно, позволяется?

20
задан Anton 29 January 2010 в 21:35
поделиться

3 ответа

Это, вероятно, проблема брандмауэра. Убедитесь, что вы хотите пережить порт, который вы хотите подключиться к стороне сервера. Localhost отображает непосредственно к IP, а также перемещается через ваш сетевой стек. Вы меняете свой текст в своем коде, но, как работает ваша программа, принципиально одинакова.

8
ответ дан 30 November 2019 в 01:28
поделиться

Вместо того, чтобы использовать IP-адрес из WhatismyiPaddress.com, что, если вы просто получите IP-адрес прямо с машины и подключите это? WhatismyiPaddress.com даст вам адрес вашего роутера (я предполагаю, что вы находитесь в домашней сети). Я не думаю, что переадресация портов будет работать, поскольку ваш запрос придет из сети, а не снаружи.

1
ответ дан 30 November 2019 в 01:28
поделиться

Если вы получили свой IP-адрес с внешнего веб-сайта ( http://whatismyipaddress.com/ ), у вас есть внешний IP-адрес. Если ваш сервер находится в одной локальной сети, вместо этого вам может понадобиться внутренний IP-адрес. Местные IP-адреса выглядят как 10.x.x.x, 172.x.x.x, или 192.168.x.x.

Попробуйте предложить на на этой странице Чтобы найти то, что ваша машина считает, что его IP-адрес.

1
ответ дан 30 November 2019 в 01:28
поделиться
Другие вопросы по тегам:

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