博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程-UDP
阅读量:6342 次
发布时间:2019-06-22

本文共 5093 字,大约阅读时间需要 16 分钟。

 * 网络端口不是物理端口,是逻辑端口;MySQL:3306  网络:80   
 * IP公网现在不是一个人一个IP了,一片区域一个公网IP。  本地回环地址:127.0.0.1对应本地主机名localhost
 * 传输层:udp(即时聊天,网络会议) tcp(下载,打电话)
 * 网络层:ip  (InetAddress)

 * 应用层:HTTP  FTP  

UDP例子程序:

package javaBase.net;import java.net.*;/* * 发送端 */public class UdpSend {	public static void main(String[] args) throws Exception{		//1,创建udp服务,DatagramSocket();		DatagramSocket ds = new DatagramSocket(8888);//自定义数字标识8888		//2,确定数据,并封装成数据包		byte[] buf = "udp said  i am coming".getBytes();		DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.4"),10000);		//3,用send()方法,发送数据包		ds.send(dp);		//4,关闭资源		ds.close();	}}
package javaBase.net;import java.io.*;import java.net.DatagramPacket;import java.net.DatagramSocket;/* * 接收端 */public class UdpReceive {	public static void main(String[] args) throws Exception{		//1,创建udp socket,建立端点		DatagramSocket ds = new DatagramSocket(10000);//指定端口数字标识		//2,定义接收包,存放接收到的数据		byte[] buf = new byte[1024];		DatagramPacket dp = new DatagramPacket(buf, buf.length);		//3,通过receive()方法,接收数据并写入包中		ds.receive(dp);		//4,从包中提取数据		String ip = dp.getAddress().getHostAddress();//获取本机IP?		int port = dp.getPort();//获取发送端端口  		String data = new String(dp.getData(),0,dp.getLength());//获取数据		System.out.println(ip+" : "+port+"["+data+"]");		//5,关闭资源		ds.close();					}}

键盘输入,循环接收:

发送端:

package javaBase.net;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.*;/* * 发送端 */public class UdpSend {	public static void main(String[] args) throws Exception{		send2();	}	/*	 * 键盘输入	 */	public static void send2() throws Exception{		DatagramSocket ds = new DatagramSocket(8888);		BufferedReader in =				new BufferedReader(new InputStreamReader(System.in));		String line = null;		while((line = in.readLine())!=null){			if("over".equals(line))				break;			byte[] buf = line.getBytes();			DatagramPacket dp = 					new DatagramPacket(buf, buf.length,InetAddress.getByName("localhost"),10000);			ds.send(dp);		}		ds.close();	}	/*	 * 详细步骤,一次性	 */	public static void send1()throws Exception{		//1,创建udp服务,DatagramSocket();		DatagramSocket ds = new DatagramSocket(8888);//自定义数字标识8888		//2,确定数据,并封装成数据包		byte[] buf = "udp said  i am coming".getBytes();		DatagramPacket dp = 				new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.1.4"),10000);		//3,用send()方法,发送数据包		ds.send(dp);		//4,关闭资源		ds.close();	}}
接收端:

package javaBase.net;import java.io.*;import java.net.DatagramPacket;import java.net.DatagramSocket;/* * 接收端 */public class UdpReceive {	public static void main(String[] args) throws Exception{		receive2();			}	/*	 * 循环等待接收	 */	public static void receive2() throws Exception{		DatagramSocket ds = new DatagramSocket(10000);		while(true){			byte[] buf = new byte[1024];			DatagramPacket dp = new DatagramPacket(buf, buf.length);			ds.receive(dp);			String ip = dp.getAddress().getHostAddress();			String data = new String( dp.getData(),0,dp.getLength());			System.out.println(ip+": "+data );		}			}	/*	 * 详细步骤	 */	public static void receive1()	throws Exception{		//1,创建udp socket,建立端点		DatagramSocket ds = new DatagramSocket(10000);//指定端口数字标识		//2,定义接收包,存放接收到的数据		byte[] buf = new byte[1024];		DatagramPacket dp = new DatagramPacket(buf, buf.length);		//3,通过receive()方法,接收数据并写入包中		ds.receive(dp);		//4,从包中提取数据		String ip = dp.getAddress().getHostAddress();//获取发送端IP?		int port = dp.getPort();//获取发送端端口  		String data = new String(dp.getData(),0,dp.getLength());//获取数据		System.out.println(ip+" : "+port+"["+data+"]");		//5,关闭资源		ds.close();	}}

即时聊天程序

package javaBase.net;import java.net.*;import java.io.*;/* * 发送线程 */class Send implements Runnable{	//成员socket	private DatagramSocket ds ;	//构造方法接收传入socket	public Send(DatagramSocket ds) {		this.ds = ds;	}	@Override	public void run() {		try {			BufferedReader in =					new BufferedReader(new InputStreamReader(System.in));			String line = null;			while((line = in.readLine())!=null){				if("over".equals(line))					break;				byte[] buf = line.getBytes();				DatagramPacket dp = 						new DatagramPacket(buf, buf.length,InetAddress.getByName("localhost"),10002);				ds.send(dp);			}		} catch (Exception e) {			throw new RuntimeException("发送端错误");		}			}}/* * 接收线程 */class Receive implements Runnable{	//成员socket	private DatagramSocket ds ;	//构造方法初始化socket	public Receive(DatagramSocket ds) {		this.ds = ds;	}	@Override	public void run() {		try {			while(true){				byte[] buf = new byte[1024];				DatagramPacket dp = new DatagramPacket(buf, buf.length);				ds.receive(dp);				String ip = dp.getAddress().getHostAddress();//先看一下谁发过的呀!				String data = new String(dp.getData(),0,dp.getLength());//看看发的什么东西				System.out.println(ip+": "+data);			}					} catch (Exception e) {			throw new RuntimeException("接收端错误");		}			}}public class Chat {	public static void main(String[] args) throws Exception{		DatagramSocket sendSocket = new DatagramSocket();//发送端可以随机端口号		DatagramSocket receiveSocket = new DatagramSocket(10002);//接收端指定端口		new Thread(new Send(sendSocket)).start();		new Thread(new Receive(receiveSocket)).start();	}}

转载于:https://www.cnblogs.com/xukunn/p/4080374.html

你可能感兴趣的文章
ES5-Array-some/every
查看>>
C语言递归算法求某一数在数组中出现的次数的代码
查看>>
Gradle入门系列(5):创建多项目构建
查看>>
关于Ionic、React Native、Native的那些事
查看>>
《HelloGitHub》第 35 期
查看>>
Java synchronized
查看>>
谈谈关于前端的缓存的问题
查看>>
JavaScript 将一个数组插入到另一个数组的指定位置中
查看>>
面试中关于spring问题的回顾总结(一)
查看>>
知其然知其所以然之LinkedList常用源码阅读
查看>>
redis 安装及安装遇到的问题解决
查看>>
为什么React获取数据是在componentDidMount
查看>>
每日 30 秒 ⏱ 优雅初始化数组
查看>>
Python装饰器高级用法
查看>>
Git安装 for windows
查看>>
我统计了掘金前端面试文章出现的比例
查看>>
请给Sprint Boot多一些内存
查看>>
T 沙龙移动实践日总结 ——享物说大流量⼩程序的架构与性能优化方案
查看>>
浏览器渲染网页的过程
查看>>
聊聊系统平均负载
查看>>