Почему эти данные сокета отправляются только один раз на сервер Java?

1

Я просто хочу играть в сетевую игру и вам нужно общение между Client Start... Server Yes... Client Дайте мне карты... (Сервер не отвечает на этот код, и если мне нужно создать всегда новый сокет, как я получит тот же адрес.... localhost просто для цели тестирования) Сокет работает только один раз Я не могу понять, почему????????

Я слушаю на сервере, пока он прав, но он получает только одну строку и не получает ничего в следующей попытке....

сервер просто слушает и читает

package client;     

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

public class Client {                        

    Client() {                         
        try {
        Socket socket = new Socket("localhost",2222);
        int i=0;
        while(i<100){
            i++;
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os,true);
            pw.println(i);
        }                          
        } catch(IOException e){
            System.out.println("Client Constructor Exception");
        }
    }

    public static void main(String[] args) throws Exception{
        Client client = new Client();
    }
}

Код сервера - это..... пожалуйста, помогите мне

package server;

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

public class Server {

    Server() {
        try{
            serverSocket = new ServerSocket(2222);
        } catch(IOException e) {
            System.out.println("IOException in Server Constructor");
        }
    }

    public void operate() {
        try{
 //           Control control = new Control();
            while (true) {
                socket = serverSocket.accept();
                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
               System.out.println(br.readLine());
                //control.recieve(socket, br.readLine());
            }
        } catch(IOException e) {
            System.out.println("IOException in Server operate function");
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.operate();
    }

    private ServerSocket serverSocket;
    private Socket socket;
}

Выход:

запустить: запустить

почему он не работает 100 раз.....

Теги:
sockets

4 ответа

3
Лучший ответ

В коде сервера вам необходимо переместить server.accept() вне цикла. Попробуй это. Это сработает. Наряду с этим я попытался с мгновенным ответом с сервера.

серверный код.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private ServerSocket serverSocket;
    private Socket socket;

    Server() {
        try {
            serverSocket = new ServerSocket(2222);
        } catch (IOException e) {
            System.out.println("IOException in Server Constructor");
        }
    }

    public void operate() {
        try {
            // Control control = new Control();
            socket = serverSocket.accept();
            while (true) {
                System.out.println("Server starts listening on "
                        + serverSocket.getLocalPort());

                System.out.println("Server accepts connection.");

                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os, true);
                pw.println("Hi Client");

//              Thread.sleep(1000);
                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                System.out.println(br.readLine());
                System.out.println("reply sent to client");
                // control.recieve(socket, br.readLine());
            }
        } catch (IOException /*| InterruptedException*/ e) {
            System.out.println("IOException in Server operate function");
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.operate();
    }

}

Код клиента:

package com.java.examples;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    Client() {
        try {
            Socket socket;
             socket = new Socket("localhost",2222);

            // InputStream in = socket.getInputStream();
            while (true) {
//              socket = new Socket("localhost", 2222);
                System.out.println("Socket - " + socket.getLocalPort());
                OutputStream os = socket.getOutputStream();
                InputStream is = socket.getInputStream();
                PrintWriter pw = new PrintWriter(os, true);
                pw.println("Hi Server");
//              Thread.sleep(2000);
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                System.out.println("Waiting for server reply..");
                System.out.println(br.readLine());
                System.out.println("Got reply from server..");
                // pw.flush();
            }
        } catch (IOException/* | /*InterruptedException*/ e) {
            e.printStackTrace();
            System.out.println("Client Constructor Exception");
        }
    }

    public static void main(String[] args) throws Exception {
        Client client = new Client();
    }

}
  • 0
    Сэр, что вы предложите, если у меня будет четыре или пять клиентов ...
5

Вы создаете новый сокет каждый раз внутри цикла, вы хотите получить

socket = new Socket("localhost",2222); 

вне бесконечного цикла

  • 1
    Извините, я хочу написать цикл снаружи работает правильно, но внутри не так, как я буду копировать внутри IP-адреса localhost каждый раз
0
Socket socket = new Socket("localhost",2222);  
OutputStream os=null;   
PrintWriter pw=null;     

while(true){                                   
  os = socket.getOutputStream();                   
  pw = new PrintWriter(os,true);                     
  pw.println("Start");  
  pw.flush();  // to empty the writer buffer                     
}
  • 0
    Тот же Босс, только работающий Однажды .....
  • 0
    Вы уверены, что правильно слушаете на стороне сервера? можешь поставить свой серверный код?
Показать ещё 3 комментария
0
Socket socket = new Socket("localhost",2222);  
OutputStream os=null;   
PrintWriter pw=null;     

while(true){                                   
    os = socket.getOutputStream();                   
    pw = new PrintWriter(os,true);                     
    pw.println("Start");                       
}          
  • 0
    не работает только программа работает, не получая никакого "Пуск" после одного раза .... Но программа остается на зависании
  • 0
    добавить: pw.flush (); после pw.println («начало»);
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню