zoukankan      html  css  js  c++  java
  • 《Java从入门到放弃》JavaSE入门篇:网络编程(入门版)

    要进行网络编程,首先要搞清楚目的是什么。

    网络编程说简单点就是在网络上的计算机进行数据的交互。

    wKiom1nDU8jBR29DAADRe0E88II285.png

    既然要进行数据交互,那就需要有一个发送方和一个接受方。

    按网络上的说法,就是一个攻一个受·j_0025.gif

    当然,现阶段网上的电脑一般来说都是既接受数据,也能发送数据的,所以说这些电脑都是“插座型”的,进可攻,退可受!!!

    好吧,还是使用专业点的名字吧:客户端/服务器

    那么具体到两台电脑,它们是如何来交互数据的呢?请看下图:

    wKioL1nDVIrikiO8AACwoz0sGOs008.png


    从步骤来分析:

    一、服务器端程序

        1.1创建一个服务器套接字(ServerSocket),并绑定到指定端口。

        1.2侦听来自客户端的请求,如果接受到连接则返回套接字对象(socket)。

        1.3获得输入/输出流,也就是进行数据的接收或发送。

        1.4关闭套接字(socket)。

    二、客户端程序

        2.1创建一个套接字,向服务器指定商品发送请求。

        2.2与服务器正确连接后开始数据的接收或发送。

        2.3关闭套接字。

    步骤分析完了,接下来就是实施了。

    服务器端代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class MyServer {
        private static final int SERVER_PORT = 9527// 指定侦听端口
     
        public MyServer() {
            try {
                ServerSocket ss = new ServerSocket(SERVER_PORT); // 创建服务器套接字
                System.out.println("服务端已启动,正在等待客户端...");
                Socket s = ss.accept(); // 侦听来自客户端的请求
                InputStream in = s.getInputStream(); // 获得输入流,用来接收数据
                OutputStream out = s.getOutputStream(); // 获得输出流,用来发送数据
                byte[] buf = new byte[1024]; // 数据缓存
                int len = in.read(buf); // 从输入流中读取数据
                String strFromClient = new String(buf, 0, len);
                System.out.print("来自客户端的信息>>");
                System.out.println(strFromClient);
                String strToClient = "我也很好!";
                out.write(strToClient.getBytes()); // 往输出流中发送数据
                // 关闭输入流和输出流
                in.close();
                out.close();
                // 关闭通信套接字和服务器套接字
                s.close();
                ss.close();
                System.out.println("服务端已关闭。");
            catch (IOException e) {
                e.printStackTrace();
            }
        }
         
        public static void main(String[] args) {
            MyServer ms = new MyServer();
        }
    }

    客户端代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class MyClient {
        private static final int SERVER_PORT = 9527;  //服务器的侦听端口
        public MyClient() {
            try {  
                //由于服务端也是运行在本机,所以创建本机的InetAddress对象
                InetAddress address = InetAddress.getByName("localhost");
                Socket s = new Socket(address, SERVER_PORT);  //向服务器侦听端口发出请求
                System.out.println("客户端已启动。");
                InputStream in = s.getInputStream();     //获得输入流,用来接收数据
                OutputStream out = s.getOutputStream();  //获得输出流,用来发送数据
                String strToServer = "你好!";
                out.write(strToServer.getBytes());   //往输出流中发送数据
                byte[] buf = new byte[1024];
                int len = in.read(buf);              //从输入流中读取数据
                String strFromServer = new String(buf, 0, len);  
                System.out.print("来自服务端的回答>>");
                System.out.println(strFromServer);
                in.close();out.close();  //关闭输入流和输出流
                s.close();               //关闭通信套接字
                System.out.println("客户端已关闭。");
            catch (UnknownHostException nhe) {
                System.out.println("未找到指定主机...");
            catch (IOException ioe) { 
                ioe.printStackTrace();
            }
        }
         
        public static void main(String[] args) {
            MyClient mc = new MyClient();
        }
    }

    先运行服务器端

    wKioL1nDWzizH3DqAAAdegLMUa8760.png

    再运行客户端,可以发现服务器端的内容发生了变化

    wKiom1nDW9zQWpbWAAAjBpnMi-k530.png

    再切换到客户端的输出窗口

    wKiom1nDXAzAcF5hAABHB78MZ7I848.png

    客户端的输出内容如下:

    wKiom1nDXAzwzJCUAAAfg4FCVAI164.png

    有兴趣的看官可以修改代码,让它变成可以从控制台反复输入文字来交互。研究得更深些的朋友,可以尝试发送文件。

    网络编程最基本的内容到这儿就结束了,此处应有点赞!!!j_0028.gif

     “软件思维”博客地址:51CTO博客园,感兴趣的小伙伴可以去看相关的其它博文。  

  • 相关阅读:
    向SDE加入图形的时候出现Update fail,5019
    在两台机器上安装分别安装oracle和arcsde
    Maxthon与IE的Cookie冲突
    数据迁移如何不需要中止业务
    ArcSde注册版本后的表
    小心注释掉的js代码也会引起错误
    vb.net对循环内的变量分配和初始化的处理
    一个webservice的初级例子
    事务处理
    ado.net 相对于ado主要有哪些改进
  • 原文地址:https://www.cnblogs.com/yixueyuan/p/7568525.html
Copyright © 2011-2022 走看看