server端:
在8080端口上创建服务器端->监听到来自客户端的socket连接->获得客户端的socket的输入输出流(使用BufferedReader,PrintWriter提高性能)->循环读客户端socket的消息:
  每读一行,如果是“END”就退出,否则就在控制台打印出来且回传给客户端.client端:
(”127.0.0.1“,8080)上创建客户端socket,建立与server的连接,->
获得socket的输入输出流->10次循环,每向服务器写入一行消息,接着就等待从服务器回传过来的消息,且在控制台打印->
向服务器写入一行消息“END”,使服务器shutdown

解决方案 »

  1.   

    import java.io.*;
    import java.net.*;public class JabberServer
    {
    public static final int PORT=8080;  //常量变量端口号
    public static void main(String[] args) throws IOException  //掷出一个错
    {
    ServerSocket s=new ServerSocket(PORT); //服务器端口声成
    System.out.println("Started: "+s);
    try
    {
    Socket socket=s.accept();  //把端口挂起开等待
    try
    {
    System.out.println("Connection accepted: "+socket);
    BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//从端口接收串行化数据放入缓冲区
    PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(
    socket.getOutputStream())),true);
    while (true)
    {
    String str=in.readLine();
    if (str.equals("END")) break;
    System.out.println("Echoing: "+str);
    out.println(str);
    }
    }
    finally
    {
    System.out.println("Closing...");
    socket.close();
    }
    }
    finally
    {
    s.close();
    }
    }
    }
    //JabberClient.java
    import java.io.*;
    import java.net.*;public class JabberClient
    {

    public static void main(String[] args) throws IOException
    {
    InetAddress addr=InetAddress.getByName("127.0.0.1");
    System.out.println("addr= "+addr);
    Socket socket=new Socket(addr,8080);
    try
    {
    System.out.println("socket= "+socket);
    BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
    for(int i=0;i<10;i++)
    {
    out.println("howdy"+i);
    String str=in.readLine();
    System.out.println(str);
    }
    out.println("END");
    }
    finally
    {
    System.out.println("closing...");
    socket.close();
    }
    }
      

  2.   

    请问如果用来实现client向server发送文件应该如何修改?
      

  3.   

    for(int i=0;i<10;i++)
    {
    out.println("howdy"+i);//这行就是呀
    String str=in.readLine();
    System.out.println(str);
    }
    out.println("END");
      

  4.   

    同意楼上的
    我产生一个文件流对象FileInputStream 为fin,然后
    out.writeByte(fin.readByte());
    一个字节一个字节的写入
      

  5.   

    可是当client读到文件的末尾时怎么通知server端发送的文件已经到末尾了呢?
    比如下面这样拷贝一个文件是通过是否等于-1来判断文件是否结束:
    BufferedInputStream in=new BufferedInputStream( new FileInputStream("Eventually.mp3"));
    BufferedOutputStream out=new BufferedOutputStream( new FileOutputStream("e.mp3"));
    byte[] buffer=new byte[255];
    while((in.read(buffer))!=-1)
    {
        out.write(buffer);
    }
    in.close();
    out.close();