zoukankan      html  css  js  c++  java
  • 网络编程(转发自“软件思维”)

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

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

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

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

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

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

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


    从步骤来分析:

    一、服务器端程序

        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();
        }
    }

    先运行服务器端

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

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

    客户端的输出内容如下:

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

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

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

  • 相关阅读:
    【leetcode】1020. Partition Array Into Three Parts With Equal Sum
    【leetcode】572. Subtree of Another Tree
    【leetcode】123. Best Time to Buy and Sell Stock III
    【leetcode】309. Best Time to Buy and Sell Stock with Cooldown
    【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
    【leetcode】467. Unique Substrings in Wraparound String
    【leetcode】823. Binary Trees With Factors
    【leetcode】143. Reorder List
    【leetcode】1014. Capacity To Ship Packages Within D Days
    【leetcode】1013. Pairs of Songs With Total Durations Divisible by 60
  • 原文地址:https://www.cnblogs.com/TYDBLOG/p/7598503.html
Copyright © 2011-2022 走看看