//这是我的服务端
public class Server { public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(19887);
System.out.println("端口创建成功");
System.out.println(server.getLocalPort());
Socket mylisten = server.accept();
System.out.println("有客户端进来"); // 直接封装
BufferedReader mmin = new BufferedReader(new InputStreamReader(
mylisten.getInputStream()));
PrintWriter mmout = new PrintWriter(new OutputStreamWriter(mylisten
.getOutputStream())); mmout.write("欢迎光临");
mmin.readLine(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}//这是我的客户端
public class Client { public static void main(String[] args) {
try {
Socket mysc = new Socket("127.0.0.1", 19887);
InputStream in = mysc.getInputStream();
OutputStream out = mysc.getOutputStream();
InputStreamReader myin = new InputStreamReader(in);
OutputStreamWriter myout = new OutputStreamWriter(out);
BufferedReader mmin = new BufferedReader(myin);
PrintWriter mmout = new PrintWriter(myout);
mmin.readLine();
mmout.write("你好"); } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}我理解是这样的,运行服务端,当服务器开始监听后,运行客户端,当客户端连接到服务端,服务端向客户端发送“欢迎光临”  也就是这句代码   mmout.write("欢迎光临");  然后客户端读到内容  再向服务端发送你好……我写的是这样的流程嘛,我是这样想的,大家 能否给个解释……谢谢大家 了   等着做一个小项目这个问题卡了我半天,大哥哥们,大姐姐们多多指点下……

解决方案 »

  1.   

    lz有什么问题吗?PrintWriter发现发送消息后,要刷新,new 出来的时候,后面加个true吧
      

  2.   

    思路是正确的,其中有几个细节问题:1. 一楼提过,PrintWriter要注意缓冲区的问题。PrintWriter默认是Full Buffer,就是缓冲区满了才会写出去,要改成Line Buffer要用PrintWriter pw = new PrintWriter(stream, true);这样写一行就能马上从缓冲区刷新出去。但同时,用write还是不能做到这一点,必须用pw.println()才能保证写一行马上刷新缓冲区,所以所有的pw.write都应该换成pw.println2. socket之间的通信没问题,但没有把输出反映到屏幕上,用System.out.println(mmin.readLine())即可。测试了一下,没问题
      

  3.   

    做这种服务器与客户端对聊的程序最好代码要写的清晰:(可以参考下以下思路:)
    服务器:
    1、创建ServerSocket//serverSocket
    2、创建并启动监听线程
    3、监听连接创建和客户端通信的连接客户端就比较简单做个读写的就行
      

  4.   

    用readLine();时
    write(msg+"\n");
    "\n"不要少了