0

我正在尝试在客户端和服务器之间进行简单的聊天或 2 路通信

我面临的问题是,如果我在任何一侧继续输入新文本,那么它不会显示出来......只有第一个输入的文本会显示出来。

从服务器端输入文本后,服务器端和客户端都退出,并且从客户端输入一次。

Server
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class Server {
    ServerSocket server;
    Socket s;
    InputStream input;
    OutputStream out;
    Scanner in=new Scanner(System.in);
    BufferedReader br;
    PrintWriter pw;
    String str1;
    String str2;
    public void create() throws Exception{
       server=new ServerSocket(40000);
       System.out.println("Begin :) Server");
       s=server.accept();
       input=s.getInputStream();
       out=s.getOutputStream();
       br=new BufferedReader(new InputStreamReader(input));
       pw=new PrintWriter(out);
       t1.start();
       t2.start();
    }
    Thread t1=new Thread(new Runnable(){
        @Override
        public void run (){
         str1=in.nextLine();
         pw.println(str1);
         pw.flush();
        }
    });
    Thread t2=new Thread(new Runnable(){
        @Override
        public void run(){
           try{
            str2=br.readLine();
           }catch(Exception e){}
           System.out.println(str2);
        }
    });
    public static void main(String[] args) throws Exception{
       Server s=new Server();
       s.create();       
    }
}


Client
import java.util.Scanner;
import java.net.*;
import java.io.*;
public class Client {
    Socket s;
    InputStream input;
    OutputStream out;
    BufferedReader br;
    PrintWriter pw;
    Scanner in;
    String str1;
    String str2;
    public void create() throws Exception{
        s=new Socket("localhost",40000);
        System.out.println("Begin :) Client");
        input=s.getInputStream();
        out=s.getOutputStream();
        br=new BufferedReader(new InputStreamReader(input));
        pw=new PrintWriter(out);
        in=new Scanner(System.in);
        t1.start();
        t2.start();
    }
    Thread t1=new Thread(new Runnable(){
        @Override
        public void run(){
             str1=in.nextLine();
             pw.println(str1);
             pw.flush();
        }
    });
    Thread t2=new Thread(new Runnable(){
        @Override
        public void run(){
            try {
                str2=br.readLine();
            } catch (Exception e) {}   
            System.out.println(str2);
        }
    });
    public static void main(String[] args) throws Exception {
        Client c=new Client();
        c.create();
    }
}

有没有办法在不使用线程的情况下实现 2 路通信?

4

1 回答 1

0
while(true){
    str1=in.nextLine();
    pw.println(str1);
    pw.flush();
}

对所有其他运行方法语句执行相同的操作,并且代码运行良好

于 2013-07-06T10:51:41.210 回答