import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;public class TestServer {
public static void main(String args[]) {
try { 
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);String info;
while(true){
info = dis.readUTF();
if(info.equals("bye"))
break;
System.out.println("客户机: " + info);
info = br.readLine();
dos.writeUTF(info);
if(info.equals("bye"))
break;}
dis.close(); 
dos.close();
s1.close();
s.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace(); 
}
}
}客户端的是import java.io.*;
import java.net.Socket;
import java.net.SocketException;public class TestClient {
public static void main(String args[]) {
try { 
Socket s1 = new Socket("localhost",8888);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);String info;
while(true){
info = br.readLine();
dos.writeUTF(info);
info = dis.readUTF();
System.out.println("服务器: " + info);
if(info.equals("bye"))
break;}
dis.close(); 
dos.close();
s1.close();
}catch (SocketException e) {
System.out.println("网络连接异常,程序退出!");
}catch (IOException e) {
e.printStackTrace(); 
}
}
}问题是连接好以后不管是在客户段还是在服务器只能写一句然后回车才有效果,如果你在客户端写两句就不行,但是我的想法是写N句服务器都可以收到,怎么办??

解决方案 »

  1.   

    服务器
    while(true){ 
    info = dis.readUTF(); 
    if(info.equals("bye")) 
    break; 
    System.out.println("客户机: " + info); 
    info = br.readLine(); 
    dos.writeUTF(info); 
    dos.flush();
    if(info.equals("bye")) 
    break; } 
    客户端
    while(true){ 
    info = br.readLine(); 
    dos.writeUTF(info); 
    dos.flush();
    info = dis.readUTF(); 
    System.out.println("服务器: " + info); 
    if(info.equals("bye")) 
    break; } 
    为什么都不喜欢加flush()呢,一小时之内看见好几个这样的了
      

  2.   

    大哥还是不行啊,你怎么不试一下啊,我在客户机打一条回车后,再打的话服务器就收不到,当在服务器输入后回车就出来了,我想可能是br.readLine()这里的问题吧
      

  3.   

    恩,呵呵,br.readLine()阻塞住了
      

  4.   

    服务端:
    import java.io.*;
    import java.net.Socket;
    import java.net.ServerSocket;
    import java.net.SocketException;public class TestServer {
    private DataOutputStream dos;


    public TestServer() {
    try {
    ServerSocket s = new ServerSocket(8888);
    Socket s1 = s.accept();

    OutputStream os = s1.getOutputStream();
        dos = new DataOutputStream(os);

    InputStream is = s1.getInputStream();
    DataInputStream dis = new DataInputStream(is);

    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr); new Thread(new WriteTo()).start();
    String infor ;
    while (true) {

    infor = dis.readUTF();
    System.out.println("客户端: " + infor);

    if (infor.equals("bye"))
    break; }
    dis.close();
    dos.close();
    s1.close();
    s.close();
    } catch (SocketException e) {
    System.out.println("网络连接异常,程序退出!");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public static void main(String args[]) {
    new TestServer();

    }

    private class WriteTo implements Runnable { private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private String infow;
    public void run() {
    try {
    while(true) {
    infow = br.readLine();
    dos.writeUTF(infow);
    }
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }
    }
    }
    客户端:import java.io.*;
    import java.net.Socket;
    import java.net.SocketException;public class TestClient {

    private DataOutputStream dos;


    public TestClient() {

    try {
    Socket s1 = new Socket("localhost", 8888);

    InputStream is = s1.getInputStream();
    DataInputStream dis = new DataInputStream(is);

    OutputStream os = s1.getOutputStream();
    dos = new DataOutputStream(os);


    new Thread(new WriteTo()).start();
    String infor;
    while (true) {

    infor = dis.readUTF();
    System.out.println("服务器: " + infor);
    if (infor.equals("bye"))
    break; }
    dis.close();
    dos.close();
    s1.close();
    } catch (SocketException e) {
    System.out.println("网络连接异常,程序退出!");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public static void main(String args[]) {
    new TestClient();
    } private class WriteTo implements Runnable { private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private String infow;
    public void run() {
    try {
    while(true) {
    infow = br.readLine();
    dos.writeUTF(infow);
    }
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }
    }
    }不知道是不是符合lz的要求?
      

  5.   

    不好意思,服务端的多了一个
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    忘了删除!!
      

  6.   

    客户端
    import java.io.*; 
    import java.net.Socket; 
    import java.net.ServerSocket; 
    import java.net.SocketException; public class TestServer {

    public static void main(String args[]) { 
    try { 
    ServerSocket s = new ServerSocket(8888); 
    Socket s1 = s.accept(); 
    OutputStream os = s1.getOutputStream(); 
    DataOutputStream dos = new DataOutputStream(os); 
    InputStream is = s1.getInputStream(); 
    DataInputStream dis = new DataInputStream(is); 

    new MyThread(dos).start();
    String info=null;  while(true){ 
    info = dis.readUTF();
    if(info.equals("bye")) 
    break; 
    System.out.println("客户机: " + info); 

    dis.close(); 
    dos.close(); 
    s1.close(); 
    s.close(); 
    }catch (SocketException e) { 
    System.out.println("网络连接异常,程序退出!"); 
    }catch (IOException e) { 
    e.printStackTrace(); 

    }} 
    class MyThread extends Thread{
    private String info=null; 
    private BufferedReader br;
    private DataOutputStream dos;


    public MyThread(DataOutputStream dos){
    this.dos=dos;
    InputStreamReader isr = new InputStreamReader(System.in); 
    br = new BufferedReader(isr); 
    }
    @Override
    public void run() {
    try {
    while(true){
    info = br.readLine(); 
    dos.writeUTF(info); 
    dos.flush(); 
    }
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }

    }服务器端
    import java.io.*; 
    import java.net.Socket; 
    import java.net.SocketException; public class TestClient { 
    public static void main(String args[]) { 
    try { 
    Socket s1 = new Socket("localhost",8888); 
    InputStream is = s1.getInputStream(); 
    DataInputStream dis = new DataInputStream(is); 
    OutputStream os = s1.getOutputStream(); 
    DataOutputStream dos = new DataOutputStream(os); 
    new MyThread1(dos).start();
    String info; 
    while(true){ info = dis.readUTF(); 
    System.out.println("服务器: " + info); 
    if(info.equals("bye")) 
    break; } 
    dis.close(); 
    dos.close(); 
    s1.close(); 
    }catch (SocketException e) { 
    System.out.println("网络连接异常,程序退出!"); 
    }catch (IOException e) { 
    e.printStackTrace(); 



    class MyThread1 extends Thread{
    private String info=null; 
    private BufferedReader br;
    private DataOutputStream dos;


    public MyThread1(DataOutputStream dos){
    this.dos=dos;
    InputStreamReader isr = new InputStreamReader(System.in); 
    br = new BufferedReader(isr); 
    }
    @Override
    public void run() {
    try {
    while(true){
    info = br.readLine(); 
    dos.writeUTF(info); 
    dos.flush(); 
    }

    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }

    }
    用线程控制