SERVER端:import java.io.*;
import java.net.*;
import java.applet.Applet;
public class talkserver
{
public static void main(String args[])
{
try
{
ServerSocket server = null;
try
{
server = new ServerSocket(4700);
}catch(Exception e)
{
System.out.println("can not listen to:" + e);
}
Socket socket = null;
try
{
socket = server.accept();
}catch(Exception e)
{
System.out.println("Error:" + e);
}
String line;
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:" + is.readLine());
line = sin.readLine();
while (!line.equals("bye"))
{
os.println(line);
os.flush();
System.out.println("Server:" + line);
System.out.println("Client:" + is.readLine());
line = sin.readLine();
} is.close();
os.close();
socket.close();
server.close();
}catch(Exception e)
{
System.out.println("Error" + e);
}
}
}
CLIENT端:import java.io.*;
import java.net.*;
public class talkclient
{
public static void main(String args[])
{
try
{
Socket socket = new Socket("127.0.0.1",4700);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String readline;
readline = sin.readLine();
while (!readline.equals("bye"))
{
os.println(readline);
os.flush();
System.out.println("Client:" + readline);
System.out.println("Server:" + is.readLine());
readline = sin.readLine();
}
os.close();
is.close();
socket.close();
}catch(Exception e)
{
System.out.println("Error" + e);
}
}
}

解决方案 »

  1.   

    他们是怎么建立互相通话的通道的?没有看到一个OutputStream通向客户端(或服务端)SOCKET的通道啊?
    程序是对的 可以运行
      

  2.   

    程序是对的
    服务端通过socket发送消息给客户端
    客户段监听socket的到消息
      

  3.   

    通过socket建立通信,服务器有个socket = server.accept();,如果没连接上就会抛出异常
    然后你的这段代码就是你代码里互发消息和接受消息的核心了,建立连接之后消息都是在流里传递的
    BufferedReader is = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
                PrintWriter os = new PrintWriter(socket.getOutputStream());
                BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
                System.out.println("Client:" + is.readLine());
      

  4.   

    1。 server 端先运行后, 会停在这句,
         socket = server.accept();
    2. 然后Client运行过Socket socket = new Socket("127.0.0.1",4700); 这句时。3. Server端会继续。 这样Server端的这个socket就正好与Client端沟通。
    楼主可以在Eclipse中调这两个程序看看,就明白了。
      

  5.   

    贴个完整的,可以支持多客户端聊天的程序供楼主参考,
    http://mybeautiful.javaeye.com/blog/659317
      

  6.   

    谢谢楼上的 我想问SERVER端的输出流PrintWriter os = new PrintWriter(socket.getOutputStream());打印流套接在输出流上 依然是正常输出吗
      

  7.   


    是的,这是封装了下OutputStream而已,    /**
         * Creates a new PrintWriter, without automatic line flushing, from an
         * existing OutputStream.  This convenience constructor creates the
         * necessary intermediate OutputStreamWriter, which will convert characters
         * into bytes using the default character encoding.
         *
         * @param  out        An output stream
         *
         * @see java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream)
         */
        public PrintWriter(OutputStream out) {
    this(out, false);
        }
    罗嗦一下,所谓out,就是写出去的,就这个socket了而言,是通过OutputStream发数据给对方的。