【问题标题】:Java Simple Client/Server read/writeJava 简单客户端/服务器读/写
【发布时间】:2013-07-03 23:36:24
【问题描述】:

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

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

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

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路通信?

【问题讨论】:

  • 您应该在无限循环中等待消息,当您收到消息时然后生成一个线程来处理它。
  • 嗨,线程 t1 和 t2 总是在运行,因此当流中的文本不会t they read it from the stream and print it? also even if main thread terminates the threads t1 & t2 should nt 终止仪式?那么为什么在服务器和客户端中的每个条目之后整个程序都会终止?

标签: java client-server bufferedreader printwriter


【解决方案1】:
while(true){
    str1=in.nextLine();
    pw.println(str1);
    pw.flush();
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2010-10-19
    • 2013-03-17
    相关资源
    最近更新 更多