网络编程 UDP TCP传输数据
来源:互联网 发布:外汇模拟软件 编辑:程序博客网 时间:2024/06/05 15:21
1.
网络编程三要素
A:IP地址:InetAddress: 网络中设备的标识,不易记忆,可用主机名B:端口号: 用于标识进程的逻辑地址,不同进程的标识
C:传输协议: 通讯的规则常见协议:TCP,UDP
UDP和Tcp的区别
UDP
将数据源和目的封装成数据包中,不需要建立连接;
每个数据报的大小在限制在64k;
因无连接,是不可靠协议;
不需要建立连接,速度快
TCP
建立连接,形成传输数据的通道;(io流)
在连接中进行大数据量传输;
需要连接所以是可靠协议;
必须建立连接,效率会稍低
UDP协议发送数据
客户端(发送):
a: 创建UDP通讯客户端对象(DatagramSocket)
b: 创建数据报包 public DatagramPacket(byte[] buf, int length,InetAddress address,int port)c: 发送 数据
d: 释放资源
public class KeHuDuan {public static void main(String[] args) throws IOException {//创建客户端对象 DatagramSocket ds = new DatagramSocket();byte by[] = "你好".getBytes();int len = by.length;InetAddress address = InetAddress.getByName("192.168.0.25");//创建数据报包DatagramPacket dp = new DatagramPacket(by, len, address, 9999);//发送数据ds.send(dp);ds.close();}}
UDP协议接收数据
服务端:
a: 创建UDP通讯协议服务器端对象(DatagramSocket) 注意要用有参数构造 指定端口号
b: 创建数据报包,作用用来接收数据 // public DatagramPacket(byte[] buf, int length)
c: 接收数据 receive(dp) ;
d: 解析数据报包,拿出数据 dp.getData() ; dp.getLength() ;
e: 释放资源
public class FuWuDuan {public static void main(String[] args) throws IOException {//创建服务器对象 DatagramSocket ds = new DatagramSocket(9999);byte by[] = new byte[1024];int length = by.length;// 创建数据报包,作用用来接收数据DatagramPacket dp = new DatagramPacket(by, length);ds.receive(dp);//接受数据//解析数据报包 因为在客户端时,已将将数据包装好了,所以需要解析byte[] data = dp.getData();int length2 = dp.getLength();//获取IP地址InetAddress inetAddress = dp.getAddress();//获取IP地址对象String ip = inetAddress.getHostAddress();//返回IP地址字符串System.out.println(ip+new String(data, 0, length2));}}
例子2:客户端键盘循环输入,服务端显示
客户端程序
public class KeKuDuan {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket();// 客户端对象InetAddress address = InetAddress.getByName("192.168.0.25");//键盘录入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入汉字");String lin = null;while ((lin = br.readLine()) != null) {System.out.println("请输入汉字");byte[] buf = lin.getBytes();int length = buf.length;//数据包对象DatagramPacket dp = new DatagramPacket(buf, length, address, 7777); ds.send(dp);}ds.close();}}服务端程序
public class FuWuDuan {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket(7777);// 创建服务端对象while (true) {byte[] buf = new byte[1024];int length = buf.length;//创建数据报包 用来接收数据DatagramPacket dp = new DatagramPacket(buf, length);ds.receive(dp);// 解析数据包byte[] data = dp.getData();int length2 = dp.getLength();System.out.println(new String(data, 0, length2));}}}
TCP:例子1.客户端将数据发送给服务端
TCP协议发送数据
a: 创建TCP通讯协议客户端对象(Socket) // public Socket(String host, int port)
b: 获取输出流对象(要将数据写进管道中)
c: 写数据
d: 释放资源
客户端程序
public class KeHuDuan {public static void main(String[] args) throws IOException{//创建客户端对象Socket sk = new Socket("192.168.0.25", 5555);//获取输出流对象(要将数据写进输出管道中) OutputStream out = sk.getOutputStream(); out.write("你好".getBytes());sk.close();}}TCP协议接收数据
a: 创建TCP通讯协议服务器端对象(ServerSocket)
b: 监听客户端
c: 获取输入流对象(要将数据从管道中读出来)
d: 读取数据
e: 释放资源
服务端程序
public class FuWuDuan {public static void main(String[] args) throws IOException {//创建服务端对象ServerSocket ss = new ServerSocket(5555);//监听客户端(卡在这块进行监听)Socket sk = ss.accept();InputStream in = sk.getInputStream();//每一个字节读取byte by[] = new byte[1024];int length = in.read(by);System.out.println(new String(by, 0, length));}}
例子2
客户端循环输入,服务器端把客户端的数据保存在文件中
客户端程序:
public class KeHuDuan {public static void main(String[] args) throws IOException {Socket sk = new Socket("192.168.0.25", 8888);//键盘录入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//获取输出管道(将数据写进管道中)OutputStream out = sk.getOutputStream();//(这相当于管道)BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));//写进管道String lin = null;System.out.println("请输入");while((lin = br.readLine())!= null){System.out.println("请输入");bw.write(lin);bw.newLine();bw.flush();}}}服务器端程序:
public class FuWuDuan {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(8888);System.out.println("等待连接中");Socket sk = ss.accept();//监听System.out.println("已连接上");//获取输入管道(把数据从管道中读出来)InputStream in = sk.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));//将读取到的数据写进文件中BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));String lin = null;while((lin = br.readLine())!=null){bw.write(lin);bw.newLine();bw.flush();}sk.close();}}
阅读全文
0 0
- 网络编程 UDP TCP传输数据
- 网络编程--传输协议tcp/udp
- java 网络编程 基于TCP ,UDP的网络传输
- 网络编程【OSI/RM TCP/IP】【网络通信三要素】【UDP传输 & TCP传输】【DNS域名解析】
- Unix网络编程—传输层:TCP和UDP
- UNIX网络编程--传输层:TCP、UDP、SCTP(二)
- 【UNIX网络编程读书笔记】第二章 传输层 TCP/UDP
- Unix网络编程(二)传输层UDP,TCP协议
- Unix网络编程二:传输层:TCP、UDP、SCTP
- UNIX网络编程1:传输层协议TCP、UDP、SCTP
- 网络编程--tcp传输
- TCP网络编程&&UDP
- 网络编程 UDP TCP
- 网络编程(TCP/UDP)
- 网络编程-UDP-TCP
- TCP/UDP网络编程
- 网络编程TCP/UDP
- 网络编程(tcp、udp)
- python语法——注释,列表,组织列表
- net::err_file_not_found
- 10-12&&10-13总结
- Wannafly挑战赛1 B.Xorto【思维+二分】
- Warning: require(): open_basedir restriction in effect.
- 网络编程 UDP TCP传输数据
- caffe和tensorflow中padding区别
- 计算机二进制原码、反码、补码
- Java数组,去掉重复值、增加、删除数组元素
- "零基础学python"之神奇的python同步赋值及动态特性
- 使用Python进行文本分类
- 信息安全的基础:对称加密、非对称加密、摘要算法
- iOS自动化UI测试——KIF使用小样
- CorelDRAW 导航制作起来让网站更加醒目好看