网络编程的引入

网络编程::
把分布在不同地理区域的计算机与专门的外都设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。设备之间在网络中进行数据的传输,发送/接收数据。
IP地址:
用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。
端口号:
IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用端口来区分

网络通信协议:
计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
由于结点间联系复杂,制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系。

找们开友的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使用传输层的服务呢?在应用层和传输层之间,则是使用套接字来进行分离。
套接字就像传输层为应用层开的一个小口,应用程序通过这个小口向远程发送数据,或接收远程发来数据;而这个小口以内,也就是数据进入这个口之后,或者数据从这个口出来之前,是不知道也不需要知道的,也不会关心它如何传输,这属于网络其它层次的工作。
Socket实际是传输层供给应用层的编程接口。传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信。Socket就是应用层与传输层之间的桥梁

单向通信

客户端

public class TesClient {//客户端

    public static void main(String[] args) throws IOException {
        System.out.println("客户端启动");
        //套接字要指定服务器Ip和端口号
        Socket s = new Socket("192.168.137.1",8888);
        //对于程序员来说,利用输出流传送数据
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF("你好我是客户端");
        //关闭
        dos.close();
        os.close();
        s.close();
    }
}

服务器端

public class TestServer {
    public static void main(String[] args) throws IOException {
        System.out.println("服务器端启动");
        //套接字
        ServerSocket ss = new ServerSocket(8888);
        //等待客户端发送数据
        Socket s = ss.accept();
        //服务器感受到的输入流
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        //接收客户端发送的数据
        String str = dis.readUTF();
        System.out.println(str);

        //关闭
        dis.close();
        is.close();
        s.close();
        ss.close();
    }
}

 双向通信

客户端

public class TesClient {//客户端

    public static void main(String[] args) throws IOException {
        System.out.println("客户端启动");
        //套接字要指定服务器Ip和端口号
        Socket s = new Socket("192.168.137.1",8888);
        //对于程序员来说,利用输出流传送数据
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF("你好我是客户端");

        //对返回的服务器数据进行处理
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        String str = dis.readUTF();
        System.out.println("服务器对我说");

        //关闭
        dos.close();
        os.close();
        s.close();
    }
}

服务器端

public class TestServer {
    public static void main(String[] args) throws IOException {
        System.out.println("服务器端启动");
        //套接字
        ServerSocket ss = new ServerSocket(8888);
        //等待客户端发送数据
        Socket s = ss.accept();
        //服务器感受到的输入流
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        //接收客户端发送的数据
        String str = dis.readUTF();
        System.out.println("客户端说:" + str);
        //向客户端发送数据
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF("你好,客户端,我接收到你的信息了");

        //关闭
        dos.close();
        os.close();
        dis.close();
        is.close();
        s.close();
        ss.close();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值