一般涉及到网络的应用,都会提到两个‘端’,一个提供服务叫服务端;一个申请服务叫客户端。一台服务器电脑可以通过服务程序向外提供多个服务(如http/ftp)。作为一台外网服务器,也就是一个服务端,它必须有一个固定的IP,我们就是通过这个IP访问到这台电脑,要想访问一个特定的服务,就得指定端口号,这是区分不同服务的关键,1-1024为系统自留端口。

ServerSocket:侦听所有的客户端向服务端发送的建立套接字请求,然后返回套接字对象Socket,客户端和服务端的连接建立。

构建一个ServerSocket对象,需要指定一个端口号,侦听到连接请求,获得一个Socket对象,建立Socket---Socket的连接


import java.io.*;

import java.net.*;

public class JabberServer{

  public static fianl int port=8080;

  public static void main(String[] args){

    ServerSocket ss=new ServerSocket(port);

    System.out.println(ss);

    try{

      Socket s=ss.accept();

      System.out.println(s);

      try{

        BufferedReader br=new BufferedReader(

                    new InputStreamReader(

                      s.getInputStream()

                    )

                  );

        //建立连接后,向服务器写入输出内容,只有当输入内容缓存每次被刷新,才能通过网络发送下一批消息

        PrintWriter pw=new PrintWriter(

                  new BufferedWriter(

                    new OutputStreamWriter(

                      s.getOutputStream();

                    )

                  )

                ,true);

        String str=new String();

        int i=0;

        while(true){

          str=br.readLine();

          System.out.println(str);

          pw.println(++i+"content from server");

          if(str.equals("END")

            break;

        }

      }finally{

        System.out.println("Socket close");

        s.close();

      }

    }finally{

      System.out.println("ServerSocket close");

      ss.close();

    }

  }

}



import java.io.*;

import java.net.*;


public class JabberClient{


  public static void main(String[] args) thrwos Exception{

    InetAddress add=InetAddress.getByName(null);

    //InetAddress add=InetAddress.getByName("localhost");

    //InetAddress add=InetAddress.getByName("127.0.0.1");

    System.out.println(add);

    Socket s=new Socket(add,JabberServer.port);

    System.out.println(s);

    try{

      //建立连接后,向服务器写入输出内容,只有当输入内容缓存每次被刷新,才能通过网络发送下一批消息

      PrintWriter pw=new PrintWriter(

                new BufferedWriter(

                  new OutputStreamWriter(

                    s.getOutputStream()

                  )

                )

              ,true);

      //获得服务器返回的消息


      BufferedReader br=new BufferedReader(

                  new InputStreamReader(

                    s.getInputStream()

                  )

                );


      String str=new String();

      for(int i=0;i<10;i++){

        pw.println(i+"content from client");

        str=br.readLine();

        System.out.println(str);

      }

      //告诉服务端,客户端内容写入完毕

      pw.println("END");

    }finally{

      System.out.println("Socket close");

      s.close();

    }

  }

}


/**--注意--**/

以上代码都是在文本编辑器中写的,可能会有些许纰漏