客户端代码
package com.lovo.test;import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class ClientTest { /**
 * @param args
 */
public static void main(String[] args) {

Socket socket = null;

String msg = null;

try {
socket = new Socket("127.0.0.1",9527);
System.out.println("客户端启动.....");
while(true){
Scanner scan = new Scanner(System.in);
msg = scan.next();
OutputStream out = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
bw.write(msg);
bw.flush();
System.out.println("您(客户端)说:" + msg);
}


} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(socket != null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }}服务器端的多线程代码
package com.lovo.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;public class ServerThread extends Thread {
Socket socket = null;

String msg = null;

public ServerThread(){

}

public ServerThread(Socket socket){
this.socket = socket;
}
public void run(){




InputStream in;
try {
in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
msg = br.readLine();
System.out.println("客户端说:" + msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}
服务器端的代码package com.lovo.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;import org.xml.sax.InputSource;public class ServerTest { /**
 * @param args
 */
public static void main(String[] args) {
ServerSocket server = null;

Socket socket = null;

String msg = null;

try {
server = new ServerSocket(9527);
System.out.println("服务器开始监听....");
while(true){
socket = server.accept();
new ServerThread(socket).start();
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(socket != null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

} }}

解决方案 »

  1.   

    主要是问题你服务端使用了BufferedReader的readLine()方法问题,客户端一直没有发回车过来,所以你的读一行一直得到不到满足,服务器商就没有输出了
    改造了一下:
    线程类:
    while(true)
    {
    msg = br.readLine();
    System.out.println("客户端说:" + msg);
    }
    客户端类
     while(true){
              Scanner scan = new Scanner(System.in);
              msg = scan.next();
             OutputStream out = socket.getOutputStream();
             BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
             bw.write(msg+"\n"); //加上一个回车                    bw.flush();
                    System.out.println("您(客户端)说:" + msg);
                }
      

  2.   

    那请问一下,
    线程类的那个部分写成:
                while(true){  
                    in = socket.getInputStream();
          BufferedReader br = new BufferedReader(new InputStreamReader(in));
                  msg = br.readLine();
          System.out.println("客户端说:" + msg);
       }和您那样写有什么区别呢?
    为什么你那个不每次得到socket上获取的流依然能过读出客户端每次所发的消息呢?
      

  3.   

    bw.write(msg);
    bw.flush();
    改成br.println(msg);
    bw.flush();
      

  4.   

    楼主我想请问一下哈,用MyEclipse运行这个程序在控制台为甚麽啥都米有看见啊?后面出来的界面是怎麽样子的捏?