网络编程

一、网络:将不同区域的计算机连接到一起 局域网 城域网 互联网

二、IP地址 确定网络上一个绝对地址|位置 -->房子的地址

三、端口号:区分计算机软件的 -->房子的房门 2个字节 0-65535 共65536 个

  1、在同一个协议下 端口号不能重复 不同协议下可以重复

  2、1024以下的不要使用 80-->http 21-->ftp

四、资源定位:URL 统一资源定位符(不光有资源还有定位) URI:统一资源(只有资源)

五、数据的传输

  1、协议:TCP和UDP协议

    1)、TCP(transfer control protocol):电话 类似于三次握手 面向连接 安全可靠 效率低下

    2)、UDP(UserDatagramProtocol):短信 非面向连接 效率高

  2、传输:

    1)、先封装

    2)、后拆封

1、InetAddress InetSocketAddress

2、URL

3、TCP :ServerSocket Socket

4、UDP:DatagramSocket DatagramPacket

1、InetAddress :封装 IP 及DNS

  方法: 

 2、InsetSocketAddress:封装端口

1)、创建对象:

2)、方法:

UDP:以数据为中心 非面向连接 不安全 数据可能丢失 效率高

一、类 DatagramSocket DatagramPacket

1、客户端:

a、创建DatagramSocket 类+端口

b、准备数据 字节数组

c、打包 DatagramPacket+服务器地址 及端口

d、发送

e、释放资源

2、服务端:

a、创建DatagramSocket类+指定端口

b、准备接受容器 字节数组 Datagrampacket 

c、包 接收数据

d、分析

e、释放资源

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Sever {
    public static void main(String[] args) throws IOException {
        DatagramSocket server=new DatagramSocket(8888);
        //准备容器
        byte[] con=new byte[1024];
        DatagramPacket packet=new DatagramPacket(con,0, con.length);
        server.receive(packet);
        //分析数据
        double data=convert(packet.getData());
        System.out.println(data);

    }
    public static double convert(byte[] b) throws IOException {
        DataInputStream dis=new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(b)));
        double data=dis.readDouble();
        dis.close();
        return data;
    }
}

import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class Client {
    public static void main(String[] args) throws IOException {
        //创建客户端
        DatagramSocket client=new DatagramSocket(9999);
        //准备数据
        double d=2.1;
        byte[] data=convert(d);
        //打包
        DatagramPacket packet=new DatagramPacket(data,0,data.length,new InetSocketAddress("127.0.0.1",8888));
        //发送
        client.send(packet);
        client.close();

    }
    public static byte[] convert(double d) throws IOException {
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(bos));
        dos.writeDouble(d);
        dos.flush();
        byte[] data=bos.toByteArray();
        dos.close();
        return data;
    }
}

TCP:面向连接 安全 可靠 效率低 类似于打电话

一、面向连接:请求 相应 Request-Response

二、Socket编程

1、服务器:ServerSocket

2、客户端:Socket

import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 1、创建服务器
 */
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建服务器
        ServerSocket server=new ServerSocket(8888);
        //建立连接
        Socket socket=server.accept();
        System.out.println("建立一个连接");
        String s="欢迎使用";
       /* DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
        dos.writeUTF(s);
        dos.flush();*/
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write(s);
        bw.newLine();//下一行
        bw.flush();

    }
}

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 * 创建客户端
 */
public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket client=new Socket("localhost",8888);
        //接收数据
     /*  DataInputStream dis=new DataInputStream(client.getInputStream());
       System.out.println(dis.readUTF());*/
        BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
        System.out.println(br.readLine());



    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值