zoukankan      html  css  js  c++  java
  • review40

    使用URL创建对象的应用程序称为客户端程序。

    URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。

    InetAddress类可以将域名和IP地址一起输出。

    如:

    InetAddress address = InetAddress.getByName("www.sina.com.cn");

    网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程(程序)。

     网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程。

    客户端程序使用Socket类建立负责连接到服务器的套接字对象。

    Socket的构造方法是Socket(String host, int port),参数host是服务器的IP地址,port是一个端口号。

    当套接字对象clientSocket建立后,clientSocket可以使用方法getInputStream()获得一个输入流,这个输入流的源和服务器的一个输出流的目的地刚好相同,一次客户端用输入流可以获取一个输出流中的数据;clientSocket使用方法getOutputStream()获得一个输出流,这个输出流的目的地和服务器端的一个输入流的源刚好相同,因此服务器用输入流可以读取客户写入到输出流的数据。

    客户负责呼叫

    为了能使客户成功地连接到服务器,服务器必须建立一个ServerSocket对象。

    ServerSocket的构造方法是ServerSocket(int port),port是一个端口号。port必须和客户端呼叫的端口号相同。

    当服务器的ServerSocket对象serverForClient建立后,就可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来。 

    Client.java

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.Socket;
    
    public class Client {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String [] mess = {"2010世界杯在哪举行?", "巴西进入世界杯了吗?", "中国进入世界杯了吗?"};
            Socket mysocket;
            DataInputStream in = null;
            DataOutputStream out = null;
            
            
            try {
                mysocket = new Socket("127.0.0.1", 2010);
                in = new DataInputStream(mysocket.getInputStream());
                out = new DataOutputStream(mysocket.getOutputStream());
                for(int i = 0; i < 3; i++)
                {
                    out.writeUTF(mess[i]);
                    String s = in.readUTF();
                    System.out.println("客户收到服务器的回答: " + s);
                    Thread.sleep(500);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    
    }

    Server.java

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String [] answer = {"南非", "进入世界杯了", "哈哈"};
            ServerSocket serverForClient = null;
            Socket socketOnServer = null;
            DataOutputStream out = null;
            DataInputStream in = null;
            
            try {
                serverForClient = new ServerSocket(2010);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            try {
                System.out.println("等待客户呼叫");
                socketOnServer = serverForClient.accept();
                out = new DataOutputStream(socketOnServer.getOutputStream());
                in = new DataInputStream(socketOnServer.getInputStream());
                for(int i = 0; i < answer.length; i++)
                {
                    String s = in.readUTF();
                    System.out.println("服务器收到客户的提问:" + s);
                    out.writeUTF(answer[i]);
                    Thread.sleep(500);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    }
     

     运行结果:

    Server.java

    Client.java

  • 相关阅读:
    Vue使用watch监听一个对象中的属性
    小程序 显示对话框 确定-取消
    【微信小程序】 wx:if 与 hidden(隐藏元素)区别
    vue项目移植tinymce踩坑
    XMLHttpRequest.withCredentials 解决跨域请求头无Cookie的问题
    appJSON["window"]["navigationBarTextStyle"] 字段需为 black 或 white
    Java写 插入 选择 冒泡 快排
    编码表理解
    Centos yum安装java jdk1.8
    Java Hibernate和.Net EntityFramework 如何在提交事务之前 就拿到需要新增实体的Id
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9490386.html
Copyright © 2011-2022 走看看