java网络编程——基于UDP和TCP协议的小例子
来源:互联网 发布:uv数据 编辑:程序博客网 时间:2024/06/05 13:26
网络编程3要素:
1.IP地址:目的主机的唯一标识
2.port端口号:目的主机上的目标程序的唯一标识
3.protocol:协议;分为udp和tcp
通信原理:
1.无论是udp还是tcp其通信底层都是由socket(套接字:包括IP和port端口两部分)来实现的;
2.数据:
udp将数据封装在数据报包(DatagramPacket)对象内;
TCP通信的两端直接是输入输出流;
原理图:
下面通过代码来加深理解:
一、基于UDP的简单通信程序
接收端:
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;public class ReceiveDemo {public static void main(String[] args) throws IOException {// 创建socketDatagramSocket socket = new DatagramSocket(9999);// 创建接受包byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);// 接受数据socket.receive(packet);// 阻塞式// 解析数据String ip = packet.getAddress().getHostAddress();String content = new String(packet.getData(), 0,packet.getLength());System.out.println("From:" + ip + "\n" + "content: " + content);// 释放资源socket.close();}}
发送端:
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.UnknownHostException;public class SendDemo {public static void main(String[] args) throws IOException,UnknownHostException {// 创建socket对象DatagramSocket socket = new DatagramSocket();// 创建发送包(ip+port在包上,因为是把包发送出去,让包去寻找目的主机上的目标端口)byte[] buf = "hello udp !".getBytes();DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.100"), 9999);// 发送socket.send(packet);// 释放资源socket.close();}}
二、基于TCP的简单通信程序
接收端:
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class ServerDemo {public static void main(String[] args) throws IOException {// 创建服务器socket对象ServerSocket ss = new ServerSocket(8888);// 监听客户端的连接Socket socket = ss.accept();// 阻塞// 获取输入流InputStream is = socket.getInputStream();byte[] buf = new byte[1024];// This method blocks until input data is available, end of file is// detected, or an exception is thrown.int len = is.read(buf);String content=new String(buf, 0, len);System.out.println("收到内容:"+content);//获取输出流,并向客户端反馈(可选)OutputStream os=socket.getOutputStream();os.write("Server Received!".getBytes());//释放资源socket.close();//注意:服务器一般是不关的//ss.close();}}
客户端:
import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws Exception {// 创建客户端socket对象Socket s = new Socket("192.168.1.100", 8888);// 获取输出流,并写入数据OutputStream os = s.getOutputStream();os.write("hello ,tcp".getBytes());// 获取输入流,从中取出服务端的反馈信息InputStream is = s.getInputStream();byte[] buf = new byte[1024];int len = is.read(buf);String content = new String(buf, 0, len);System.out.println("反馈内容:" + content);}}
1 0
- java网络编程——基于UDP和TCP协议的小例子
- java基于UDP协议的网络编程
- 基于udp的协议的 socket编程小例子
- 基于UDP、TCP协议的C#网络编程之一
- 【转载】 基于UDP、TCP协议的C#网络编程
- 基于UDP、TCP协议的C#网络编程
- winsock网络编程——基于TCP的程序设计和基于UDP的程序设计
- [网络编程]TCP协议和UDP协议的区别
- 黑马程序员——java网络编程中的传输协议:UDP和TCP
- Java网络编程_基于UDP协议的网络编程
- java 网络编程 基于TCP ,UDP的网络传输
- java 基于TCP/UDP协议的Socket编程
- Java网络编程UDP与TCP协议
- java网络编程之UDP、TCP协议
- 基于TCP/IP协议的网络编程—Socket编程
- 网络编程(5)—— 基于Linux系统的UDP协议socket服务器和客户端
- 网络编程(6)—— 基于Windws系统的UDP协议socket服务器和客户端
- 黑马程序员——Java网络编程(TCP和UDP)
- DOM(0)什么是DOM
- Android struts2 对象流
- Android学习历程21-代码设计规范
- javaScript发展史(jQuery库版本)
- 多个activity的启动与退出
- java网络编程——基于UDP和TCP协议的小例子
- headerVIew不随tableView 滚动
- 优化 Go 中的 map 并发存取
- Eclipse快捷键 10个最有用的快捷键
- .sh文件中的首行 #!/bin/bash 以及 bad interpreter: Text file busy 文本文件忙错误
- NSString部分属性和方法介绍
- Linux mysql二进制包的安装
- 超详细:用图诠释Android Studio调试技巧
- lintcode打劫房屋