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();}}
阅读全文
0 0
- Java笔记12.9
- java笔记
- JAVA笔记
- java笔记
- java笔记
- JAVA笔记
- java笔记
- Java 笔记
- java笔记
- java 笔记
- java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- 维特比算法
- SparkStream源码分析:JobScheduler的JobStarted、JobCompleted是怎么被调用的
- Java的算数运算符、关系运算符、逻辑运算符、位运算符
- IT行业与风险投资
- 经典算法 | 字符串最小编辑距离分析与证明
- Java笔记12.9
- 《剑指offer》刷题笔记(链表):删除链表中重复的结点
- MYSQL5.7版本sql_mode=only_full_group_by问题
- 如何学习JAVA
- NGUI页签Tabview
- 特征选择——卡方检验(使用Python sklearn进行实现)
- 小东吖 之 java Map集合类
- 4519: [Cqoi2016]不同的最小割
- 【笔记】机器学习里的各种LOSS(L1,L2)