----------android培训、java培训、java学习型技术博客、期待与您交流!------------
在此,分享一下自己学习JAVA的学习心得。有不对的地方请帮忙改正,也希望对想学java的同学有帮助!
JAVA基础
--网络编程
网络基本知识:
1)OSI参考模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
2)TCP/IP参考模型
应用层、传输层、网际层、主机至网络层
网络通讯要素 :
IP地址:用于标记一台计算机的身份证。IP地址由网络地址(确定网络)和主机地址(网络中的主机)组成。
本地回环地址:127.0.0.1 主机名:localhost 。
端口号 :用于标识进程的逻辑地址,不同进程的标识 。
有效端口:0~65535,其中0~1024系统使用或保留端口。
常用端口:
1) web服务端口:80
2) tomcat服务器端口:8080
传输协议:通讯的规则
常见协议:TCP,UDP
在Java中网络程序有两种协议:TCP和UDP,TCP通过握手协议进行可靠的连接
UDP:
1) 将数据及源和目的封装成数据包中,不需要建立连接
2)每个数据报的大小在限制在64k内
3)因无连接,是不可靠协议
4)不需要建立连接,速度快
TCP:
1)建立连接,形成传输数据的通道
2)在连接中形成大数据量传输
3)通过三次握手完成连接,是可靠协议
4)必须建立连接,效率会稍低
Socket:
1)Socket就是为网络服务提供的一种机制。
2)通信的两端都有Socket。
3)网络通信其实就是Socket。
4)数据在两个Socket间通过IO传输。
UDP传输步骤:
1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。
Java练习代码:
练习:通过键盘录入获取要发送的信息
class UdpSend2
{
public static void main(String[] args) throws Exception
{
//1,创建udp socket,建立端点。
DatagramSocket ds = new DatagramSocket();
// 通过带缓冲区的字符流实现键盘录入
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//初始化line为null
String line = null;
//循环读取键盘录入的内容
while((line=bufr.readLine())!=null)
{
//定义一个标记,退出循环
if("886".equals(line))
break;
//2,定义数据包。用于存储数据。
byte[] buf = line.getBytes();,
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10001);
// 3,通过socket服务,将已有的数据包发送出去。通过send方法。
ds.send(dp);
}
ds.close();//4,关闭资源
}
}
class UdpRece2
{
public static void main(String[] args) throws Exception
{
// 1,创建udp socket,建立端点。
DatagramSocket ds = new DatagramSocket(10001);
while(true)
{
//2,定义数据包。用于存储数据。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3,通过服务的receive方法将收到数据存入数据包中。
ds.receive(dp);//阻塞式方法
//4,通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data);
}
}
}
TCP传输方式:
服务端:
1,建立服务端的socket服务。ServerSocket();并监听一个端口。
2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。
4,关闭服务端。(可选)
Java练习代码:
练习:TCP传输
class TransClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.254",10005);
//定义读取键盘数据的流对象。
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写入到socket输出流。发给服务端。
//BufferedWriter bufOut =
//new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//使用PrintWriter将数据发送给服务端。
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//定义一个socket读取流,读取服务端返回的大写信息。
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
out.println(line);//通过PrintWriter方法实现发送
/*
//通过BufferedWriter方法实现发送
bufOut.write(line);
bufOut.newLine();
bufOut.flush();
*/
String str =bufIn.readLine();
System.out.println("server:"+str);
}
//关闭资源
bufr.close();
s.close();
}
}
class TransServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10005);
// 建立服务端socket服务。并监听一个端口。
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected");
//读取socket读取流中的数据。
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。
//BufferedWriter bufOut =
//new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line=bufIn.readLine())!=null)
{
System.out.println(line);
//通过PrintWriter方法实现发送
out.println(line.toUpperCase());
/*
//通过BufferedWriter方法实现发送
bufOut.write(line.toUpperCase());
bufOut.newLine();
bufOut.flush();
*/
}
//关闭资源
s.close();
ss.close();
}
}
URL和URI:
URI:统一资源标识符,用于标识一个web资源,包含了两个部分。
URL:统一资源定位符,能够精确的定位数据的URI。
URN:统一资源名称,除了URL的URI。
在java中URI和URL是分开的两个类,URI类专门用于解析,URL用于通信。
1) String getFile() :获取此 URL 的文件名。
2)String getHost() :获取此 URL 的主机名(如果适用)。
3) String getPath() : 获取此 URL 的路径部分。
4) int getPort() :获取此 URL 的端口号。
5) String getProtocol() : 获取此 URL 的协议名称。
6) String getQuery() :获取此 URL 的查询部
知识点:网络架构:
C/S:Client/Server
客户端,服务端。
特点:
1,需要在客户端和服务端都需要按照编写的软件。
2,维护较麻烦。
好处:可以减轻服务端的压力,如网络游戏。
B/S:Browser/Server
浏览器 ,服务端。
1,客户端不用单独编写软件。因为客户端用的就是浏览器。
2,对于软件升级,只要考虑服务端即可。
弊端:所有的程序都运行在服务端,客户端的浏览器毕竟解析能力较弱。对游戏等。