本人初学SE 想循环找服务端的ip,在死循环发送 但是不会。​ package socket;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;/**
 * 聊天室客户端
 * @author uid
    *
     */
    public class Client {
    /*
     * java.net.Socket 套接字
     * Socket 封装了TCP协议传输数据的细节,使得
     * 我们可以通过两条流的读写完成与远端计算机的数据交互
        */
        private Socket socket;
        /*
     * 构造方法用来初始化客户端
        */    public Client(){
     try {
     /*
      * 实例化Socket的过程就是连接服务端的
      * 过程
      * 参数1:服务器的IP地址
      * 参数2:服务端程序打开端口
      * 
      * 我们通过IP可以找到网络上的服务端所在计算,通过端口
      * 可以找到该计算上运行的服务端应用程序从而建立连接
      */
     System.out.println("正在连接服务器...");
     socket=new Socket("localhost",8088);
     //localhost 计算机本身的意思
     System.out.println("已连接服务端!");
     }catch(Exception e) {
     e.printStackTrace();
     }
    }
    /**
     * 客户端开始工作的方法
        */
        public void start() {
        try {
         Scanner s=new Scanner(System.in);
         /*
          * Socket提供的方法:
          * OutputStream getOutputStream();
          * 通过网络发送给远程计算机.
          */
         OutputStream out=socket.getOutputStream();
         OutputStreamWriter osw =new OutputStreamWriter(out,"utf-8");
         BufferedWriter bw=new BufferedWriter(osw);
         PrintWriter  pw=new PrintWriter(bw,true); 
         System.out.println("请输入信息:");         while(true) {
         String line=s.nextLine();
         pw.println(line);
         }
         // String sta=null;
         // while(!"exit".equals(sta)) {
         // sta=s.nextLine();
         // if(!"exit".equals(sta)) {
         // pw.println(sta);
         // }
         // }        } catch (Exception e) {
         e.printStackTrace();
        }
        }
        public static void main(String[] args) {
        Client  client =new Client();
        client.start();
        }
        }

解决方案 »

  1.   

    你不是自己写出来了吗?改改就好了
    while(true) {
        String line=s.nextLine();
        if(!"exit".equals(sta)) { //如果是exit就退出循环
            break;
        }
        pw.println(line);
    }
      

  2.   

    上面笔误, if(!"exit".equals(sta)) 改成 if("exit".equals(line))
      

  3.   

    我的想法是把ip最后那三位数弄成一个变量,循环局域网ip找到后同时给多个服务端死循环发送我没弄懂。
      

  4.   

    你循环发送到不同的服务器,你的socket连接要重新建立的
    while(true) {
        String line=s.nextLine();
        for(String h : ipList) { //假设你要发送的ip在一个集合里
            socket=new Socket(h,8088); //重新和服务器建立socket连接
            OutputStream out=socket.getOutputStream();
            OutputStreamWriter osw =new OutputStreamWriter(out,"utf-8");
            BufferedWriter bw=new BufferedWriter(osw);
            PrintWriter  pw=new PrintWriter(bw,true); 
            pw.println(line);
        }
    }
      

  5.   

    ,如果要改的话放在那,不知道怎么改,我理解你的意思是把知道的ip后三位放进集合对吧。 如果我不知道那些局域网的ip后三位 我知道前面的咋弄
      

  6.   


    我不知道你所说的后3位是啥意思。是192.168.1.***还是 192.*.*.*,反正ip4的话每个段就是0-255自己设置循环就行了。
    这个我知道,最上面那个try ip和端口连接那怎么写?不会你上面写的是开始工作的那个方法对吧
      

  7.   


    你再client构造中加入参数啊 client(String ip )
    主程序设定循环获取ip,然后传递参数启动client方法,在client中判断是否连接成功用isConnected()方法,true调用循环发送方法,false终止进程。
      

  8.   

     看不懂阿,socket=new Socket
    这里面的ip最后那个我循环它 它不是就是new了255个Socket么。怎么判断无效ip不会,就不会了我用我原来的代码改写直接报错。
      

  9.   


    你再client构造中加入参数啊 client(String ip )
    主程序设定循环获取ip,然后传递参数启动client方法,在client中判断是否连接成功用isConnected()方法,true调用循环发送方法,false终止进程。
     看不懂阿,socket=new Socket
    这里面的ip最后那个我循环它 它不是就是new了255个Socket么。怎么判断无效ip不会,就不会了我用我原来的代码改写直接报错。自学太难了
      

  10.   


    其实你已经写了大部分了,我帮你简单的改了一下。
    import java.io.BufferedWriter;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;/**
     * 聊天室客户端
     * 
     * @author uid
     *
     */
    public class Client {
    /*
     * java.net.Socket 套接字 Socket 封装了TCP协议传输数据的细节,使得 我们可以通过两条流的读写完成与远端计算机的数据交互
     */
    private Socket socket=null;
    /*
     * 构造方法用来初始化客户端
     */ public boolean Clients(String ip,int port) {
    try {
    /*
     * 实例化Socket的过程就是连接服务端的 过程 参数1:服务器的IP地址 参数2:服务端程序打开端口
     * 
     * 我们通过IP可以找到网络上的服务端所在计算,通过端口 可以找到该计算上运行的服务端应用程序从而建立连接
     */
    System.out.println("正在连接服务器...");
    socket = new Socket(ip, port);
    // localhost 计算机本身的意思
    System.out.println("已连接服务端!");
    return true;
    } catch (Exception e) {
    return false;
    }
    } /**
     * 客户端开始工作的方法
     */
    public void start() {
    try {
    Scanner s = new Scanner(System.in);
    /*
     * Socket提供的方法: OutputStream getOutputStream(); 通过网络发送给远程计算机.
     */
    OutputStream out = socket.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8");
    BufferedWriter bw = new BufferedWriter(osw);
    PrintWriter pw = new PrintWriter(bw, true);
    System.out.println("请输入信息:"); while (true) {
    String line = s.nextLine();
    pw.println(line);
    }
    // String sta=null;
    // while(!"exit".equals(sta)) {
    // sta=s.nextLine();
    // if(!"exit".equals(sta)) {
    // pw.println(sta);
    // }
    // } } catch (Exception e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    String s="192.168.0.";
    Client client=new Client();
    for(int i=0;i<256;i++) {
    String ip=s+i;
    if(client.Clients(ip, 8080)) {
    client.start();
    }
    }
    }
    }
      

  11.   


    import java.io.BufferedWriter;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;/**
     * 聊天室客户端
     * 
     * @author uid
     *
     */
    public class Client {

    private Socket socket=null;
    public boolean Clients(String ip,int port) {
    try {
    System.out.println("正在连接服务器...");
    socket = new Socket(ip, port);
    System.out.println("已连接服务端!");
    return true;
    } catch (Exception e) {
    return false;
    }
    } /**
     * 客户端开始工作的方法
     */
    public void start() {
    try {
    Scanner s = new Scanner(System.in);
    /*
     * Socket提供的方法: OutputStream getOutputStream(); 通过网络发送给远程计算机.
     */
    OutputStream out = socket.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8");
    BufferedWriter bw = new BufferedWriter(osw);
    PrintWriter pw = new PrintWriter(bw, true);
    System.out.println("请输入信息:"); while (true) {
    String line = s.nextLine();
    pw.println(line);
    } } catch (Exception e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    String s="192.168.0.";
    Client client=new Client();
    for(int i=0;i<256;i++) {
    String ip=s+i;
    if(client.Clients(ip, 8080)) {
    client.start();
    }
    }
    }
    }上面注释好像错位了,重新发一下。
    但是对方服务器不承认你的连接你也是连接不上的,所以这个程序并没有什么意思,一般服务器都会防止垃圾信息的。
      

  12.   

    我已经写好了, 在main方法下面,写了个线程重写了构造还有run方法,然后在main方法启动线程传参数到socket 然后通过流循环发送到本地 0~256 个服务端。。但是我现在想弄循环端口。不会改。。