Java笔记12.9

来源:互联网 发布:幽灵行动4画面优化 编辑:程序博客网 时间:2024/06/05 04:53

网络编程

也称为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();}}
原创粉丝点击