• Java网络编程入门


    1.进程之间的通信

       运行EchoPlayer就启动一个进程,就启动了JVM进程,该进程(EchoPlayer类)执行main方法 ,echo负责生成响应结果,若想要将响应结果移动到一个远程主机上,那么此进程是无法完成的,这种情况需要创建两个程序:客户程序EchoClient和服务器程序EchoServer

      客户程序EchoClient负责与用户交互,从本地获取标准输入和标准输出,和远程服务器程序EchoServer通信,发送用户输入的信息,接收返回的信息并将结果输出到标准输出。

      服务器程序EchoServer负责接收客户程序EchoClient发送的信息,然后把响应结果发送给客户程序EchoClient。

     1 public class EchoPlayer {
     2     
     3     //负责生成相应结果
     4     public String echo(String msg){
     5         return "echo : "+msg;
     6     }
     7     
     8     public void talk() throws IOException{
     9         System.out.println("please input String :");
    10         BufferedReader bt =new BufferedReader(new InputStreamReader(System.in));
    11         String msg=null;
    12         while((msg=bt.readLine())!=null){
    13             if(msg.equals("bye")){
    14                 System.out.println(echo(msg));
    15                 break;
    16             }else{
    17                 System.out.println(echo(msg));
    18                 System.out.println("please input String :");
    19             }
    20         }
    21     }
    22     public static void main(String[] args) throws IOException {
    23         // TODO Auto-generated method stub
    24         new EchoPlayer().talk();
    25     }
    26 
    27 }

     2.用Java编写客户/服务器程序

      Java网络程序都建立在TCP/IP协议的基础上,致力于实现应用层。传输层向应用层提供了套接字Socket接口,Socket封装了下层数据传输细节,应用层的程序通过Socket来建立于远程主机的连接,以及进行数据传输。

      Java中有3种套接字类:Socket、ServerSocket、DatagrameSocket,其中前两种为TCP协议基础上的,后一种为UDP协议基础上

    服务器代码:

     1 public class EchoServer {
     2     
     3     private int port = 8000;
     4     private ServerSocket serverSocket;
     5     
     6     //利用构造器初始化服务器
     7     public EchoServer() throws IOException{
     8         serverSocket = new ServerSocket(port);
     9         System.out.println("服务器启动");
    10     }
    11     
    12     //响应输出信息
    13     public String echo(String msg){
    14         return "Server echo : "+msg;
    15     }
    16     
    17     private PrintWriter getWriter(Socket socket) throws IOException{
    18         OutputStream socketOut = socket.getOutputStream();
    19         return new PrintWriter(socketOut,true);
    20     }
    21     
    22     private BufferedReader getReader(Socket socket)throws IOException{
    23         InputStream socketIn = socket.getInputStream();
    24         return new BufferedReader(new InputStreamReader(socketIn));
    25     }
    26     
    27     public void service(){
    28         while(true){
    29             Socket socket=null;
    30             try {
    31                 //等待客户连接
    32                 socket = serverSocket.accept();
    33                 System.out.println("new connection accepted "+socket.getInetAddress()+":"+socket.getPort());
    34                 BufferedReader  br= getReader(socket);
    35                 PrintWriter pw = getWriter(socket);
    36                 String msg = null;
    37                 while((msg=br.readLine())!=null){
    38                     System.out.println(msg);
    39                     pw.println(echo(msg));
    40                     if(msg.equals("bye")){
    41                         break;
    42                     }
    43                 }
    44                 
    45                 
    46             } catch (IOException e) {
    47                 // TODO Auto-generated catch block
    48                 e.printStackTrace();
    49             }
    50         }
    51     }
    52     
    53     public static void main(String[] args) throws IOException {
    54         new EchoServer().service();
    55     }
    56 }

    客户端代码

     1 public class EchoClient {
     2     
     3     private int port=8000;
     4     private String host = "localhost";
     5     private Socket socket;
     6     
     7     public EchoClient() throws IOException{
     8         socket = new Socket(host, port);
     9     }
    10     
    11     private PrintWriter getWriter(Socket socket) throws IOException{
    12         OutputStream socketOut = socket.getOutputStream();
    13         return new PrintWriter(socketOut, true);
    14     }
    15     
    16     private BufferedReader getReader(Socket socket) throws IOException{
    17         InputStream socketIn = socket.getInputStream();
    18         return new BufferedReader(new InputStreamReader(socketIn));
    19     }
    20     
    21     public void talk(){
    22         try {
    23             BufferedReader br = getReader(socket);
    24             PrintWriter pw = getWriter(socket);
    25             BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
    26             String msg=null;
    27             while((msg = localReader.readLine())!=null){
    28                 pw.println(msg);
    29                 System.out.println(br.readLine());
    30                 if(msg.equals("bye")){
    31                     break;
    32                 }
    33             }
    34         } catch (IOException e) {
    35             // TODO Auto-generated catch block
    36             e.printStackTrace();
    37         }
    38     }
    39     public static void main(String[] args) throws IOException {
    40         // TODO Auto-generated method stub
    41         new EchoClient().talk();
    42     }
    43 
    44 }
  • 相关阅读:
    能量项链
    开学前最后一天信奥赛一本通重刷日记
    重刷信奥赛一本通日记-3
    重刷信奥赛一本通日记-2
    重刷信奥赛一本通日记-1
    第二次考试题解way
    第一次考试题解
    第一次考试感言
    「HNOI2012」矿场搭建
    「HAOI2006」受欢迎的牛
  • 原文地址:https://www.cnblogs.com/yangml/p/bling.html
Copyright © 2020-2023  润新知