代码改变世界

网络编程

2019-01-19 11:35  缩酒  阅读(238)  评论(0编辑  收藏  举报

1 。Java的网络编程包括了两种通信协议:

TCP(Transmission Control Protocal)  传输控制协议

UDP(User Datagram Prptocol) 用数据包协议

static InetAddress getLocalHost()   返回本地主机   

static InetAddress getByName(String host)   在给定主机名的情况下确定主机的 IP 地址  查找局部网内部存在的一个IP地址,如果没有找到抛出异常

 

 

 

简单的说:一个电脑上的应用程序都绑定了一个对应的编号(端口),通过IP可以定位到指定的主机(电脑),再加上端口就可以定位到指定的程序了。

 

  1. 同一台机器上不能有两个程序使用同一个端口,会冲突BindExeception
  2. URL(Uniform Resource Locator)统一资源定位符,可以直接使用此类找到互联网上的资源如一个简单的网页。

    一般由:协议名,资源所在主机(域名),端口,资源名等部分组成;

    1. URL(String protocol, String host, int port, String file)
    2. TCP协议

      1. 什么是TCP协议
        1. 概念:略 传输层的协议  传输控制协议  Socket编程
        2. 重点是此协议中有两个类Socket ServerSocket 其中有一些方法,能够实现在两个不同的终端之间传输数据(客户端-服务端-客服端)
            1. TCP的特点
                1. Java中使用Socket实现TCP程序开发,使用此类可以方便的建立可靠的,双向的,持续的,点对点的通讯连接。
                2. Socket程序开发中,服务器端使用ServerScoket等待客户端的连接,在Java的网络程序中,每一个客户端都使用Socket对象表示。

                package com.cj.TCP协议package com.cj.TCP协议;

                import java.io.BufferedReader;
                import java.io.BufferedWriter;
                import java.io.IOException;
                import java.io.InputStream;
                import java.io.InputStreamReader;
                import java.io.OutputStream;
                import java.io.OutputStreamWriter;
                import java.net.ServerSocket;
                import java.net.Socket;

                public class Server {
                    public static void main(String[] args) throws IOException {
                        //创建服务器站点
                        ServerSocket ss = new ServerSocket(2020);
                        //获取到客户端发送的数据
                        Socket server = ss.accept();
                        //获取服务器端的输入流
                        InputStream is = server.getInputStream();
                        //获取输入流中的数据
                        byte[] b = new byte[is.available()];
                        is.read(b);
                        String ssss = new String(b);
                        System.out.println(server.getInetAddress().getHostName()+":"+ssss);
                        server.shutdownInput();

                        //回应数据
                        //获取要回应的数据
                        String data = "我没睡觉,我在干活";
                        //获取服务器输出流
                                OutputStream os= server.getOutputStream();
                        //将数据写入流中
                        os.write(data.getBytes());
                        System.out.println("我说:"+data);
                        //bos.close();
                    }
                };

                import java.io.IOException;
                import java.io.InputStream;
                import java.io.OutputStream;
                import java.net.InetAddress;
                import java.net.Socket;
                import java.net.UnknownHostException;
                import java.util.Arrays;

                public class Client {
                    public static void main(String[] args) throws UnknownHostException, IOException {
                        //创建站点
                        Socket soc = new Socket(InetAddress.getLocalHost(), 2020);
                        //获取要传输的数据
                        String data = "你睡觉了吗?";
                        //获取客户端输出流
                        OutputStream os= soc.getOutputStream();
                        //将数据写入流中
                        os.write(data.getBytes());
                        System.out.println("我说:"+data);
                        soc.shutdownOutput();
                        //得到的反馈结果
                        //获取客户端输入流
                        InputStream is = soc.getInputStream();
                        byte[] b = new byte[is.available()];
                        is.read(b);
                        System.out.println(Arrays.toString(b));
                        String ssss = new String(b);
                        System.out.println("说:"+ssss);
                    }
                }