Проблема программирования сокетов в Java - PullRequest
2 голосов
/ 22 марта 2011

Я получил этот код с вашего сайта некоторое время назад.

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

class sevr implements Runnable{
    public void run() {
        ServerSocket sSkt = null;
        Socket skt = null;
        BufferedReader br = null;
        BufferedWriter bw = null;

        try{
            System.out.println("Server: is about to create socket");
            sSkt = new ServerSocket(6666);
            System.out.println("Server: socket created");
        }
        catch(IOException e){
            System.out.println("Server: socket creation failure");
        }
        try{
            System.out.println("Server: is listening");
            skt = sSkt.accept();
            System.out.println("Server: Connection Established");
        }
        catch(IOException e){
            System.out.println("Server: listening failed");
        }
        try{
            System.out.println("Server: creating streams");
            br = new BufferedReader(new InputStreamReader(skt.getInputStream()));
            bw = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream()));
            System.out.println("Server: stream done");
        }
        catch(IOException e){
            System.out.println("Server: stream failed");
        }
        System.out.println("Server: reading the request");
        try{
            String line = null;
            line = br.readLine();
            System.out.println("Server: client said-> "+ line);
        }
        catch(IOException e){
            System.out.println("Server: reading failed");
        }
        System.out.println("Server: reading fished");

        System.out.println("Server: responding");
        try{
            bw.write("Hi! I am server!\n");
            bw.flush();
        }
        catch(IOException e){
            System.out.println("Server: responding failed");
        }
        System.out.println("Server: responding finished");

        System.out.println("Server: is finishing");
        try {
            br.close();
            bw.close();
            skt.close();
            sSkt.close();
        } catch (IOException e) {
            System.out.println("Server: finishing failed");
        }
        System.out.println("Server: done");
    }
}

class clnt implements Runnable{
    public void run() {
        Socket skt = null;
        BufferedReader br = null;
        BufferedWriter bw = null;

        try{
            System.out.println("Client: about to create socket");
            skt = new Socket(InetAddress.getLocalHost(),6666);
            System.out.println("Client: socket created");
        }
        catch(IOException e){
            System.out.println("Client: socket creation failure");
        }

        try{
            System.out.println("Client: creating streams");
            br = new BufferedReader(new InputStreamReader(skt.getInputStream()));
            bw = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream()));
            System.out.println("Client: stream done");
        }
        catch(IOException e){
            System.out.println("Client: stream failed");
        }
        System.out.println("Client: requesting");
        try{
            bw.write("Hi! I am Client!\n");
            bw.flush();
        }
        catch(IOException e){
            System.out.println("Client: requesting failed");
        }
        System.out.println("Client: requesting finished");
        System.out.println("Client: reading the respond");
        try{
            String line = null;
            line =br.readLine();
            System.out.println("Client: server said-> "+ line);
        }
        catch(IOException e){
            System.out.println("Client: reading failed");
        }
        System.out.println("Client: reading fished");



        System.out.println("Client: is finishing");
        try {
            br.close();
            bw.close();
            skt.close();
        } catch (IOException e) {
            System.out.println("Client: finishing failed");
        }
        System.out.println("Client: done");
    }
}


public class Soc {


    public static void main(String[] args) {
        System.out.println("Main started");
        Thread sThread = new Thread(new sevr());
        Thread cThread = new Thread(new clnt());
        sThread.start();
        cThread.start();
        try {
            sThread.join();
            cThread.join();
        } catch (InterruptedException ex) {
            System.out.println("joining failed");
        }
        System.out.println("Main done");

    }

}

Я подключен к сети через маршрутизатор.Всего к сети подключено 3 ноутбука.Я запустил этот код на затмении.Код успешно выполнен без каких-либо ошибок.Но как мне узнать, с каким ноутбуком у моего ноутбука было соединение?Как мне это определить?

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Вы не подключились бы к любому другому компьютеру. Программа работает на клиенте и сервере на одном компьютере.

skt = new Socket(InetAddress.getLocalHost(),6666);

Как вы можете видеть здесь, клиент подключается к локальному хосту через порт 6666. А сервер прослушивает соединения через порт 6666. Чтобы подключиться к другому компьютеру, вам необходимо разделить код клиента и сервера и запустить их на разные машины. Затем вам нужно будет изменить вышеприведенную строку, чтобы создать сокет с адресом машины, на которой работает сервер.

1 голос
/ 22 марта 2011
       skt = new Socket(InetAddress.getLocalHost(),6666);

Вы можете отключить все остальные ваши компьютеры :) вы подключаетесь с локального хоста на локальный.на другом компьютере вы можете использовать метод getRemoteSocketAddress() для обнаружения SocketAddress удаленного узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...