Java笔记12.9

网络编程

也称为Soket编程,套接字编程
三要素:
1)找到IP地址
2)必须有端口
3)必须有协议
协议分为TCP协议和UDP协议
TCP协议(客户端和服务器端的交互)
1)建立连接通道(通道内的流:最基本的字节流)
2)是可靠协议
3)服务器端需要等待客户端连接,执行效率低
4)可发送大量数据,文件大小无限制
UDP协议(发送端和接收端)
1)无需建立连接通道(数据报包的形式发送数据)
2)不可靠协议
3)执行效率高
4)大小限制

UDP协议

发送端:
1)创建Socket对象
2)创建数据报包(将数据发送到接收端)
3)调用发送端发送的方法
4)关闭资源

package prac01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*发送端*/
public class Send {
    public static void main(String[] args) throws IOException {
        // 创建了UDP协议的Socket对象
        DatagramSocket ds = new DatagramSocket();

        // 要发送的话
        String s = "i love study";

        byte[] byt = s.getBytes();
        int length = byt.length;
        InetAddress address = InetAddress.getByName("10.10.10.1");
        // 指定端口号:0-65535是有效端口号
        int port = 10;

        // 创建数据报包对象
        // public DatagramPacket(byte[] buf, int length ,InetAddress address,int port)
        DatagramPacket dp = new DatagramPacket(byt, length, address, port);

        // 发送方法
        ds.send(dp);
        ds.close();
    }

}

接收端:
1)创建接收端Socket对象
2)创建一个数据报包接收数据
3)接收数据,调用DatagramSocket类中的接收方法
4)解析数据报包里的实际数据,显示在控制台上
5)关闭

package prac01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*接收端*/
public class Receive {
    public static void main(String[] args) throws IOException {
        // 创建Socket对象
        DatagramSocket ds = new DatagramSocket(10);

        // 2)创建数据报包:DatagramPacket,来接收发送端发送来的数据
        // public DatagramPacket(byte[] buf,int length)构造 DatagramPacket,用来接收长度为
        // length 的数据包。
        byte[] buf = new byte[1024];
        int length = buf.length;
        DatagramPacket dp = new DatagramPacket(buf, length);
        // 接收数据
        ds.receive(dp);

        // 解析发送过来的实际数据
        // byte[] getData() 返回数据缓冲区。
        // int getLength() 返回将要发送或接收到的数据的长度。
        byte[] byt = dp.getData();
        int len = dp.getLength();
        String s = new String(byt, 0, len);

        // 获取到ip字符串表现形式
        // public InetAddress getAddress():首先通过数据报包得到一个Ip地址对象:InetAddress
        InetAddress address = dp.getAddress();
        // 可以通过getHostAddress()得到ip地址的文本形式
        String ip = address.getHostAddress();
        System.out.println(ip + "发送了:" + s);

        ds.close() ;
    }
}

TCP协议
客户端:
1)创建客户端的Socket对象(客户端套接字流形式)
2)获取通道内的流(输出流)
3)使用输出流对象写数据
4)关闭

package prac01;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/*客户端*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
    Socket s = new Socket("10.10.10.1", 10010) ;

    //获取通道的流
    OutputStream out = s.getOutputStream() ;

    //写数据
    out.write("i love studying".getBytes());

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

服务器端:
1)创建Socket对象,指定端口
2)监听客户端链接(请求等待)
3)获取通道输入流对象
4)将数据获取并显示到控制台
5)关闭

package prac01;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*服务器端*/
public class Server {
public static void main(String[] args) throws IOException {
    //创建绑定到特定端口的服务器套接字
    ServerSocket ss = new ServerSocket(10010) ;
    System.out.println("等待客户端连接...");

    //监听客户端的连接:请求等待介入
    Socket s = ss.accept() ;
    System.out.println("客户端已经连接...");

    //获取通道内输入流对像
    InputStream in = s.getInputStream() ;

    //4)将客户端发送的数据显示到控制台上
    byte[] byt=new byte[1024];
    int len=in.read(byt);
    String s1=new String(byt,0,len);


    //获取IP地址的文本形式 
    InetAddress address = s.getInetAddress() ;
    //在通过ip地址对象getHostName();
    String ip = address.getHostAddress() ;

    System.out.println(ip+"给您发送了:"+s1);

    s.close();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值