网络编程之UDP协议和TCP协议
来源:互联网 发布:ipad不良信息过滤软件 编辑:程序博客网 时间:2024/06/05 21:06
UDP协议和TCP协议
UDP协议(用户数据报协议): 需要一个发送端和接收端;发送端:只负责发送数据,不管接收端是否接收到数据.在传输数据的过程中是允许数据报丢失的;特点: 1.需要一个发送端和接收端; 2.发送端只负责发送数据,不管接收端是否接收到数据; 3.在传输数据的过程中是允许数据报丢失的;TCP/IP协议: 特点: 1.需要一个客户端 和 服务器端; 2.不允许出现数据报丢失; 3.使用了三次握手的;
Tcp:
客户端:
1.获得Socket对象
Socket socket=new Socket(address, port);
//参数:address为要连接的电脑ip地址,port为端口
2.然后用socket对象获得i/o流
OutputStream outputStream = socket.getOutputStream();
3.用流写出文件(发送)
outputStream.write(“测试。。。”.getBytes());
4.假如有服务器回执信息
InputStream inputStream = socket.getInputStream();
5.然后读取回执信息
int read = inputStream.read();
6.最后关闭Socket流
socket.close();
public class TCPClient { public static void main(String[] args) throws Exception { // 获得客户端对象 Socket socket = new Socket("192.168.145.107", 8888); // 读取本地文件 BufferedInputStream bufferedInputStream = new BufferedInputStream( new FileInputStream( "C:\\Users\\Administrator\\Pictures\\Camera Roll\\xm.jpg")); // 获得输出流 OutputStream outputStream = socket.getOutputStream(); int cha = -1; byte[] b = new byte[1024]; while ((cha = bufferedInputStream.read(b)) != -1) { outputStream.write(b, 0, cha); } socket.shutdownOutput(); //服务端返回信息处理 InputStream inputStream = socket.getInputStream(); byte[] c = new byte[1024]; int len = inputStream.read(c); System.out.println(new String(c, 0, len)); outputStream.close(); socket.close(); System.out.println("发送完毕!"); }}
服务端:
1.获得ServerSocket对象
ServerSocket serverSocket=new ServerSocket(port);
//此处port必须跟客户端端口保持一致, 不然接收不了数据
2.用ServerSocket对象的accpet()方法,获得Socket对象1
Socket socket = serverSocket.accept();
3.用获得的Socket对象创建读取流,读取客户端Socket发来的消息
InputStream inputStream = accept.getInputStream();
int read = inputStream.read();
4.关闭Socket跟ServerSocket
socket.close();
serverSocket.close();//这个可以不关
public class TCPServer { public static void main(String[] args) throws Exception { // 获得服务端对象 ServerSocket serverSocket = new ServerSocket(8888); // 获得客户端的socket对象 Socket socket = serverSocket.accept(); // 获得socket流 InputStream inputStream = socket.getInputStream(); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( new FileOutputStream("a.jpg")); byte[] b = new byte[1024]; int len = -1; while ((len = inputStream.read(b)) != -1) { bufferedOutputStream.write(b, 0, len); } OutputStream outputStream = socket.getOutputStream(); outputStream.write("接收到了,大兄弟!!!".getBytes()); inputStream.close(); socket.close(); }}
UDP:
发送端:
1.获得DatagramSocket对象
DatagramSocket datagramSocket=new DatagramSocket();
2.创建数据流,获取键盘输入
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
3.循环把输入的内容封装到DatagramPacket数据包对象中
String line=null;
while ((line=bufferedReader.readLine())!=null) {
byte[] b=line.getBytes();
DatagramPacket datagramPacket=new DatagramPacket(b, b.length, InetAddress.getByName(“192.168.145.107”),9001);
datagramSocket.send(datagramPacket);
}
4.关闭Socket流
datagramSocket.close();
public class UDPsent { public static void main(String[] args) throws Exception { System.out.println("开始发送!"); // 创建DatagramSocket对象 DatagramSocket datagramSocket = new DatagramSocket(); // 创建读取流,获取键盘录入 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(System.in)); // 循环封装到DatagramPacket数据包中 String line = null; while ((line = bufferedReader.readLine()) != null) { byte[] buf = line.getBytes(); DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.145.107"), 9000); datagramSocket.send(datagramPacket); } datagramSocket.close(); }}
获取端:
1.获得DatagramSocket对象注意要选带端口参数的构造方法
DatagramSocket datagramSocket=new DatagramSocket(9001);
2.创建数据包,并创建DatagramPacket对象,两个参数的。
byte[] bs=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(bs, bs.length);
3.用Socket的receive方法获得数据包
datagramSocket.receive(datagramPacket);
4.用datagramPacket解析数据
byte[] data = datagramPacket.getData();
System.out.println(new String(data, 0, data.length));
5.关闭Socket流
datagramSocket.close();
public class UDPget { public static void main(String[] args) throws Exception { System.out.println("开始接收!"); // 创建DatagramSocket对象并指定端口号,与发送方端口保持一致 DatagramSocket datagramSocket = new DatagramSocket(9000); // 创建数据包,创建DatagramPacket对象 byte[] b = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(b, b.length); // 利用Socket的receive方法接收数据 datagramSocket.receive(datagramPacket); // 解析数据包 byte[] data = datagramPacket.getData(); int length = datagramPacket.getLength(); System.out.println(new String(data, 0, length)); // 关闭Socket流 datagramSocket.close(); }}
- 网络编程之UDP协议和TCP协议
- java网络编程之UDP、TCP协议
- [网络编程]TCP协议和UDP协议的区别
- 网络协议 TCP 和 UDP
- 网络编程之TCP协议与UDP对比
- 网络编程之UDP协议
- 网络编程之UDP协议
- 网络编程之UDP协议
- 网络编程之UDP协议
- 网络编程之UDP协议
- Java网络编程UDP与TCP协议
- 网络编程的TCP/UDP协议
- 网络编程--传输协议tcp/udp
- day22网络编程 UDP、TCP协议
- java基础学习网络编程之UDP和TCP协议 十四 -3
- 黑马程序员——网络协议之tcp协议和udp协议
- 网络编程之TCP协议
- 网络编程之TCP协议
- 安卓系统下生成QR码(四)——强制设置掩膜
- HandlerThread实现数字时钟
- 最大报销额
- 数据库引擎介绍
- Java类的初始化顺序
- 网络编程之UDP协议和TCP协议
- android 沉浸式2种
- Java基础之集合框架--Collection根接口(集合框架的共性功能)
- Ubuntu常用命令大全
- Unity3D-Transform
- JQuery给动态添加的元素绑定事件
- [LeetCode-Algorithms-3] "Longest Substring Without Repeating Characters" (2017.9.8)
- myeclipse所有快捷键
- 多个项目配置在同一个tomcat下的问题