黑马程序员_java网络编程

来源:互联网 发布:百度算法之轮流展现法 编辑:程序博客网 时间:2024/05/19 16:51

------- android培训、java培训、期待与您交流! ----------

InetAddress类

InetAddress类表示互联网协议(IP)地址.

本类没有构造函数来直接实例化对象,但是可以通过该类的静态方法获取本类对象。同时我们也可以通过该对象获取其IP地址与主机名。

注:IP地址每段数值范围在0-255之间,占一个字节。

端口:有效端口值为0-65535,其中0-1024为系统使用或作为紫铜保留端口。

示例:获取本地主机IP信息

import java.net.*;public class Test {public static void main(String[] args) throws Exception{//获取本地主机IP对象InetAddress i=InetAddress.getLocalHost();//获取本机IP地址System.out.println(i.getHostAddress());//获取本机名System.out.println(i.getHostName());}}

示例:获取指定主机名的IP信息

import java.net.*;public class Test {public static void main(String[] args) throws Exception{//根据主机名获取IP对象InetAddress i=InetAddress.getByName("www.baidu.com");//获取IP地址System.out.println(i.getHostAddress());//获取主机名System.out.println(i.getHostName());}}

UPD协议数据传输

UPD协议特点:

传输速度快,容易丢包,是不可靠协议。

面向无连接(不需要连接,发送方只负责发送数据,不负责数据一定被接收)

数据被封包,每个数据包的大小限制子64K以内。

UPD的运用:

UPD数据发送:

思路:

1.建立UPDSocket服务,

2.提供数据,并将数据封装到数据包中,

3.通过Socket服务的发送功能,将数据发送出去,

4.关闭资源。

import java.net.*;public class Test {public static void main(String[] args) throws Exception{//建立UPDSocket数据服务DatagramSocket ds=new DatagramSocket();//获取要发送的数据byte[] data="UDP数据传输".getBytes();//将数据封装到数据包中DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("192.168.1.106"),10000);//发送数据ds.send(dp);//关闭资源ds.close();}}

UPD数据接收:

思路:

1.定义UPDSocket服务,通常会监听一个端口,即这个程序思念高一数字标识,便于明确哪些数据被该程序接收,如不指定端口,系统会默认自动分配。

2.定义一个数据包,用于要存储接收到的数据。并且数据包对象有更多功能可以用来提取数据中的不同数据信息。

3.通过Socket服务的receive方法将收到的数据存入已经定义好的数据包中。

4.通过数据包对象的特有功能处理数据,如:将这些不同的数据取出。

5.关闭资源。

import java.net.*;public class Test {public static void main(String[] args) throws Exception{//建立UPDSocket数据服务DatagramSocket ds=new DatagramSocket(10000);//获取要发送的数据byte[] buf=new byte[1024];//将数据封装到数据包中DatagramPacket dp=new DatagramPacket(buf,buf.length);//发送数据ds.receive(dp);//获取数据包中发送端主机IP对象InetAddress i=dp.getAddress();//获取发送端IP地址String ip=i.getHostAddress();//获取端口int port=dp.getPort();//获取数据长度int len=dp.getLength();//获取数据包中的数据byte[] data=dp.getData();//关闭资源ds.close();}

示例:UPD通信

获取键盘录入的数据,并用发送端发送至接收端。

import java.io.*;import java.net.*;//UDP发送端class UDPSend{public static void main(String[] args) throws Exception{//创建Socket服务DatagramSocket ds = new DatagramSocket();//创建键盘输入流BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//读取键盘录入数据String line = null;while((line=br.readLine())!=null){//如果遇到"byebye",就跳出循环if("byebye".equals(line))break;//定义缓冲区byte[] buf = line.getBytes();//创建数据包,DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.106"),10001);//发送数据包ds.send(dp);}ds.close();//关闭资源}}//UDP接收端class UDPRece2{public static void main(String[] args) throws Exception{//创建Socket服务DatagramSocket ds = new DatagramSocket(10001);while(true){//创建缓冲区byte[] buf = new byte[1024];//创建数据包,DatagramPacket dp = new DatagramPacket(buf,buf.length);//用数据报包接收数据ds.receive(dp);//获取数据包中的信息IP和数据String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength());System.out.println(ip+":"+data);}}}


示例:建立一个简单的聊天程序,为了持续发送和接收数据,并且发送端和接收端需要同时进行,所以需要用到多线程功能。

 import java.io.*;import java.net.*;//建立发送端class SendSocket implements Runnable{private DatagramSocket ds;//在构造函数中加入Socket服务SendSocket(DatagramSocket ds){this.ds = ds;}//重写发送端线程run方法public void run(){try{//创建键盘录入的输入流BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));String line = null;//读取键盘沮洳数据while((line=bufr.readLine())!=null){//设置跳出循环标记if("886".equals(line))break;byte[] buf = line.getBytes();//将数据封装到数据包中DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.106"),10001);//发送数据包ds.send(dp);}//关闭资源ds.close();}catch (Exception e){throw new RuntimeException("发送失败");}}}//定义接收端class ReceSocket implements Runnable{private DatagramSocket ds;//在构造函数中加入Socket服务public ReceSocket(DatagramSocket ds){this.ds = ds;}//重写接收端线程的run方法public void run(){try{while(true){byte[] by = new byte[1024];//创建数据包DatagramPacket dp = new DatagramPacket(by,by.length);//接收数据ds.receive(dp);//获取数据包中的ip地址String ip = dp.getAddress().getHostAddress();//获取数据包中数据String data = new String(dp.getData(),0,dp.getLength());System.out.println(ip+":"+data);//ds.close();为了持续接收数据,一般接收端不关闭}}catch (Exception e){throw new RuntimeException("接收失败");}}}class SocketDemo {public static void main(String[] args) throws Exception{//创建发送端和接收端的对象DatagramSocket sendSocket = new DatagramSocket();DatagramSocket receiveSocket = new DatagramSocket(10001);//创建两个线程,Thread tsend=new Thread(new SendSocket(sendSocket));Thread treceive=new Thread(new SendSocket(receiveSocket));//开始线程tsend.start();treceive.start();}}

TCP协议数据传输

TCP协议特点:

1.面向连接,建立连接,形成传输数据的通道。

2.在连接中进行大量数据传输。

3.通过三次握手(判断)完成连接。

4.必须建立连接,效率稍低。

示例:建立简易TCP客户端和服务端

import java.net.*;import java.io.*;class TestSocket{//创建客户端Socket s=new Socket("192.168.1.106",10086);//获取客户端的输出流OutputStream os=s.getOutputStream(); //通过输出流发送数据os.write("发送客户端信息".getBytes());//关闭客户端s.close();}class TestServerSocket{//建立服务端ServerSocket ss=new ServerSocket(10086);//获取连接过来的客户端Socket s=ss.accept();//获取客户端的输入流InputStream in=s.getInputStream();//创建缓冲区byte[] buf=new byte[1024];//接收客户端发送的数据int len=in.read(buf);System.out.println(new String(buf,0,len));//获取客户端IPString ip=s.getInetAddress().getHostAddress();System.out.println("ip="+ip);//关闭资源s.close();ss.close();}

示例:

由客户端向服务端发送文件,若发送成功,服务端提示发送成功。

import java.io.*;import java.net.*;//客户端class TextSocket{public static void main(String[] args) throws Exception {Socket s = new Socket("192.168.1.106",10010);//读取文件BufferedReader br = new BufferedReader(new FileReader("123.txt"));//创建客户端输出路PrintWriter out = new PrintWriter(s.getOutputStream(),true);//发送信息String line = null;while((line=br.readLine())!=null){out.println(line);}//关闭客户端输出流s.shutdownOutput();//建立客户端输入流BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));//接收信息String str = bufr.readLine();System.out.println(str);//关闭资源br.close();s.close();}}//服务端class TextServerSocket{public static void main(String[] args) throws Exception {//创建服务端ServerSocket ss = new ServerSocket(10010);//获取连接至服务端的客户端Socket s = ss.accept();//获取客户端主机信息String ip = s.getInetAddress().getHostAddress();System.out.println("来自IP:"+ip);BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//创建用于接收文件的目的PrintWriter out = new PrintWriter(new FileWriter("333.txt"),true);String line = null;//接收客户端发送至服务端的信息while((line=bufIn.readLine())!=null){if("over".equals(line))break;out.println(line);}PrintWriter pw = new PrintWriter(s.getOutputStream(),true);//给客户端反馈信息pw.println("上传成功");//关闭资源out.close();s.close();ss.close();}

URL类

该类为封装网页地址所指向资源的类,通过本类可以获取该网站的各种信息。

import java.net.*;public class Test {public static void main(String[] args) throws Exception{//根据网址获取URL对象URL url=new URL("http://www.网址名.com"); //获取对象各种信息        sop("URL的协议:"+url.getProtocol());          sop("URL的IP地址:"+url.getHost());          sop("URL端口号:"+url.getPort());          sop("URL文件路径:"+url.getPath());          sop("URL文件名称:"+url.getFile());            sop("URL查询部分:"+url.getQuery());  }public static void sop(String s){System.out.println(s);}}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米手机通话时黑屏怎么办 小米手机通话时是黑屏怎么办? 华为手机通话时出现黑屏怎么办 微信屏幕变黑了怎么办 乐视手机打不开机怎么办 金立手机屏幕不亮怎么办 笔记本开不了机怎么办屏幕黑屏 红米4刷机失败怎么办 红米手机开不了机怎么办 红米not开不了机怎么办 红米2开不起机怎么办 小米手机免提声音小怎么办 红米手机1s黑屏怎么办 红米2完全黑屏怎么办 红米note3接电话黑屏怎么办 红米note3死机黑屏怎么办 红米note2开机之后黑屏怎么办 红米手机白屏怎么办 红米4黑屏打不开怎么办 oppo手机拨打电话时黑屏怎么办 华为手机拨打电话时黑屏怎么办 小米6x拨电话黑屏怎么办 魅族手机打电话黑屏怎么办 三星手机拨打电话时黑屏怎么办 华为畅享5打电话黑屏怎么办 小米note通话声音小怎么办 金立m5黑屏开不了机怎么办 金立手机光感器坏了怎么办 红掌根部烂了怎么办 魅族相册闪退怎么办 魅族手机闪退怎么办 苹果6手机主页面打不开怎么办 手机中病毒闪退怎么办 酷派手机开机黑屏怎么办啊 酷派手机黑屏打不开怎么办 酷派手机不开机怎么办 乐视手机开不了机怎么办 vivo手机拨号键盘不见了怎么办 华为手机拨号键盘不见了怎么办 金立手机拨号键盘不见了怎么办 酷派手机home键失灵怎么办