Java网络编程入门详解

一.了解java网络编程的基础知识。

网络编程中有两个问题:
1.如何准确定位网络上的一台或多台主机。—>通过IP确定地址
2.找到主机后如何可靠地,高效地传输数据。—>通过TCP进行数据传输

对于TCP/IP,它是Internet最基本的协议。该协议由网络层的IP协议喝传输层的TCP协议组成。

TCP协议与UDP协议区别:
TCP:需要建立连接,才能进行通信,且传输数据量大。
UDP:无需网络连接,数据大小有限定,且是一个不可靠协议。

IP地址:在java中,用InetAddress类来描述IP地址,这个类没有公共的构造方法。
但是它提供了三个用来获得InetAddress对象的静态方法。

InetAddress getLocalHost(): 返回本地主机的InetAddress对象。
InetAddress getByName(String host): 返回主机名指定的InetAddress对象。
InetAddress[ ] getAllByName(): 对于某个多IP地址主机,该方法可以得到一个IP地址数组。

InetAddress类还提供了以下方法。

String getHostAddress(): 返回IP地址字符串。
String getHostName():返回主机名。

端口:只有通过IP地址和端口号才讷讷感唯一地确定网络通信中的进程。
(端口号0—65535)
二.使用URL访问网络资源
1.创建URL对象(成功建立URL对象后,可以调用openStream()方法读取网络资源内容)

URL(String spec): 使用表示URL地址的字符串spec创建URL对象。
URL url=new URL("http://www.sina.com.cn/");
URL(String 网络协议,String 主机名,int 端口号,String file)去掉端口号也可。
URL url=new URL("http","www.baidu.com",80,"baidu.htm");
注:URL类的构造方法会抛出非运行时异常MalformedURLException,因此创建URL对象时,需要对该异常进行处理。

2.直接通过创建的URL对象读取其中内容。

URL google=new URL("http://www.google.com/");
DateInputStream dis=new DateInputStream(google.openStream());

接着String个字符串接受dis读入的内容。再输出到屏幕。
当运行时我们能得到网站中的index.html文件中的HTML标识和内容。

3.通过建立一个URL连接并从中读取内容(建立连接后,使用URLConnection类能对其进行读写。)
其步骤是:
第一步:建立连接,通过URL对象中的openConnection()方法生成一个URLConnection对象。

URL bd=new("http://www.baidu.com/");
bd.openConnection();

第二步:成功建立连接后,就可以使用URLConnection对象从连接读取或向连接读取写入某些内容了。

三.掌握使用Socket进行网络通信的方法。
什么是Socket?
区别不同应用程序进程或连接,操作系统为程序和协议交互提供的接口。称为套接字,即Socket。
主要有三个参数:IP地址,传输层协议和端口号。
使用Socket进行通信时,可以分成三个步骤:服务器监听,客户端请求,连接确认。
常见Socket分为两种:
(1)流式Socket:基于TCP协议的通信,建立连接通道再传送数据。
(2)数据报Socket:基于UPD协议的通信,无需建立,直接打包传送。
1.流式Socket:(Socket类和ServerSocket类实现流式Socket通信的主要工具。Socket类->建立c/s间的连接。ServerSocket类->创建监听服务。)
Socket类的构造方法:

Socket(String host,int port);
Socket(InetAddress address,int port);
Socket(InetAddress address,int port,InetAddress 本地主机的IP地址,int 本地主机端口号);
Socket myclient=new Socket("www.baidu,com",2000);

ServerSocket类的构造方法:

ServerSocket(int port);
ServerSocket(int port, int 服务器最大连接数);
ServerSocket ms=new ServerSocket(5000)
创建ServerSocket对象后就可以调用accept()方法接受来自客户端的请求了。
当需要结束监听的时候,使用ms.close();

2.数据报Socket(DatagramPacket类和DatagramSocket类实现无连接的数据报Socket通信。DatagramPacket->存储数据报等信息,DatagramSocket建立传送数据报的通信 )
用数据报方式编写c/s程序时,无论c还是s,都需要先建立一个DatagramSocket对象,用来接受或发送数据报,而DatagramPacket对象是数据报传输的载体。

DatagramSocket类的构造方法:

DatagramSocket();
DatagramSocket(int port);
DatagramSocket(int port,InetAddress 本地地址);
需要对抛出的非运行异常SocketException进行处理。

DatagramPacket类的构造方法:

DatagramPacket(byte[] buf,int length);
DatagramPacket(byte[] buf,int length,InetAddress address,int port);
buf中存放欲发送或接受的数据报。

在c/s接收数据之前,应该采用第一种构造方法创建DatagramPacket对象,调用DatagramSocket类的receive()方法等待数据报的到来。

DatagramSocket so=new DatagramSocket();
DatagramPacket pac=new DatagramPacket(buf,256);
so.receive();

在发送数据前,需要使用DatagramPacket类的第二种构造方法创建一个新的DatagramPacket对象,即要知名数据报发送的目的地址和端口号。发送数据报是通过DatagramSocket类的send()方法实现。

DatagramSocket so=new DatagramSocket();
DatagramPacket pac=new DatagramPacket(buf,length,address,port);
so.send(pac);

今天就介绍到这里了。我是一个小白,想通过写博客提升自己的小白。
谢谢~

发布了5 篇原创文章 · 获赞 0 · 访问量 203

猜你喜欢

转载自blog.csdn.net/weixin_44045828/article/details/89162385