JAVA 基础 网络编程

来源:互联网 发布:喀秋莎录屏软件9下载 编辑:程序博客网 时间:2024/06/01 09:19

尚硅谷课程

InetAdress类的创建和使用

InetAddress inet = InetAddress.getByName("www.badu.com");

inet = InetAddress.getByName("xxx.xxx.xx.x");

System.out.println(inet); //  控制台输出的格式为: www.badu.com/xxx.xxx.xx.x

inet.getHostName();

inet.getHostAddress();


inet.getLocalHost();//获取本地主机

将优先从本机 host文件中获取



ip 和端口

16位的整数0~65535,其中,0~1023被预先定义的服务通信占用,应当使用1034~65535中的端口

进行通信,避免发生端口冲突

端口号和IP地址的组合得出一个网络套接字


TCP协议:

使用TCP协议前,须建立TCP连接,形成传输数据通道

传输前,采用“三次握手”,是可靠的

TCP协议进行通信的两个应用进程:客户端、服务端

传输完毕,需释放已建立的连接,效率低


UDP协议:

将数据、源、目的封装成数据包,不需要建立连接

每个数据包的大小限制在64K内

因无需连接,故是不可靠的

发送数据结束时无需释放资源,速度快


socket编程,简单例子

@Test
public void client() throws UnknownHostException, IOException{
Socket so = new Socket(InetAddress.getByName("127.0.0.1"),9999);
OutputStream out = so.getOutputStream();
String str = "java网络编程";
out.write(str.getBytes());
out.close();
so.close();
System.out.println("客户端发送结束");
}

@Test
public void server() throws IOException{
ServerSocket ss = new ServerSocket(9999);
Socket so = ss.accept();
InputStream in = so.getInputStream();
byte b[]= new byte[1024];
int len = 0;
while((len =in.read(b))!= -1){
System.out.println(new String(b, 0, len));
}
in.close();
so.close();
ss.close();
System.out.println("服务端接收结束");
}


so.shutdownOutput();//显示的告诉服务端发送完毕  节点流 阻塞式  


类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序

UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报

一定能够安全送到目的地,也不能确定什么时候可以抵达。

DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。

UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接


udp编程实现

@Test
public void send() throws IOException{
DatagramSocket ds = new DatagramSocket();
byte [] b = new byte[1024];
b = "udp数据".getBytes();
DatagramPacket dp = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090);
ds.send(dp);
ds.close();
}

@Test
public void receive() throws IOException{
DatagramSocket ds = new DatagramSocket(9090);
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b,0,b.length);
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str);
ds.close();
}

URL编程

url:统一资源定位符,它表示Internet上的某一资源

由5部分组成 :<传输协议>://<主机名>:<端口号>/<文件名>

类URL的构造方法都生命抛出非运行时异常,必须要对这一异常进行处理,通常是用try-catch语句进行捕获

一个URL对象生存后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性

public String getProtocol() 获取该URL的协议名

public String getHost() 获取该URL的主机名

public String getPort() 获取该URL的端口号

public String getPath() 获取该URL的文件路径

public String getFile() 获取该URL的文件名

public String getRef() 获取该URL在文件中的相对位置

public String getQuery() 获取该URL的查询名(查询条件)


URL的方法openStream();能从网络上读取数据

若希望输出数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用

URLConnection:表示到URL所引用的远程对象的连接,当与一个URL建立连接时,首先要在一个

URL对象上通过方法

openConnection()生成对应的URLConnection对象。如果连接过程失败,将产生IOException

即:有数据输入,又有数据输出,则考虑使用URLConnection类

@Test
public void urlTest() throws IOException {
URL url = new URL("http://127.0.0.1:9090/xxx/test.txt");
InputStream in = url.openStream();
byte b[] = new byte[20];
int len = 0;
while ((len = in.read(b)) != -1) {
String str = new String(b, 0, len);
System.out.println(str);
}
in.close();
// 将获取的数据,读取,并输出到本地
URLConnection urlcon = url.openConnection();
InputStream intp = urlcon.getInputStream();
FileOutputStream fotp = new FileOutputStream(new File("test.txt"));
byte[] b1 = new byte[20];
int len1 = 0;
while ((len1 = intp.read(b1)) != -1) {
fotp.write(b1, 0, len1);
}
fotp.close();
intp.close();
}



0 0
原创粉丝点击