用两个线程模拟对话~~任何一个线程都可以随时收发信息,小弟主要不理解的是什么叫“接收”信息,请各位大哥提点下,有必要的话花点时间写下例子~~

解决方案 »

  1.   

    Socket.getInputStream()获取输入流用于“接收”
    Socket.getOutputStream()获取输出流用于“发送”
      

  2.   

    import java.io.*;
    import java.net.*;
    import java.util.*;
    .
    public class EchoServer {
    public static void main(String[] args) {
    try {
    // establish server socket
    ServerSocket s = new ServerSocket(8189);
    // wait for client connection
    Socket incoming = s.accept();
    try {
    InputStream inStream = incoming.getInputStream();
    OutputStream outStream = incoming.getOutputStream();
    Scanner in = new Scanner(inStream);
    PrintWriter out = new PrintWriter(outStream, true);
    out.println("Hello! Enter BYE to exit."); // echo client input
    boolean done = false;
    while (!done && in.hasNextLine()) {
    String line = in.nextLine();
    out.println("Echo: " + line);
    if (line.trim().equals("BYE"))
    done = true;
    }
    } finally {
    incoming.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    cmd-> telnet localhost  8189
    这是我们上课的一个小例子。楼主可以参考下。
      

  3.   

    谢谢大家帮忙了~~由于只学到Thread runnable wait notify这些小知识的应用,我用互斥直接写了个小程序,ServerSocket这些类老师还没提到~在作业里就不应用了~我的主要问题在于随时收发信息的话,我就一个键盘,怎么确定我输入的是A的话还是B的话类~~~要是互斥的话,那就算不上“随时”了~~对吧?
      

  4.   


    一个socket程序一般有客户端和服务端
    如果是命令台的话,就对应有两个命令台窗口来接收输入输出,所以不会有判断A还是B的问题.。
    如果有GUI界面,则客户端和服务端就各自有一个界面..如果必须在一个窗口下聊天的话,只能在发的消息里加一些判断标志是A说的还是B说的。收发消息,若果简单的话就是发字符串.复杂点的话就把要发的内容封装成一个对象。