------- android培训、java培训、期待与您交流! ----------
一、网络模型
- IP地址
- 网络中设备的标识
- 不易记忆,可用主机名,如www.baidu.com。
- 本地回环地址127.0.0.1 ,主机名:Localhost。
- 端口号
- 传输协议
- 找到对方IP
- 数据要发送到对方指定的引用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,称为端口(逻辑端口)。一个网络应用程序会对应一个或多个数字标识。
- 定义通信规则,称为协议。国际组织定义了通用规则TCP/IP。本地回环地址127.0.0.1,作用是测试网卡。常见端口web:80、Tomcat:8080、MySQL:3306,可以更改端口。
三、通信方式
- OSI模型有七个层、TCP/IP模型有四个层。
- 本地机器传输的是数据封包。我们面对机器是应用层,应用层加上标识封装,一层层向下封装。网络层加上IP地址,数据链路层是加上传输方式(底层传输协议),最后一层物理层(如网线、无线),物理层传输到目的地。
- 目的机器接到数据封包以后,每一层都读本层特有数据,经过层层拆包最后到达应用层。应用层把数据给指定端口。
- TCP/IP模型简化了OSI模型。我们面对的是传输层、网际层。JavaWeb开发在应用层。
四、InetAddress类
- 方法getLocalHost():获取本地主机IP/主机名。
- 方法getHostAddress():获取本地地址,以IP为主
- 方法getHostName():获取本地主机名。
- 方法getByName():获取网络主机名。如果不存在主机名还是IP地址。
五、TCP和UDP(必须掌握)
- UDP
- 将数据、源、目的封装成数据包,不需要建立连接。
- 面向无连接,不论对方是否收的到,只管发数据,每个包最大64K.
- 因为无连接,所以速度快、协议不可靠。
- 视频会议、聊天工具、桌面共享
- TCP
- 建立连接、形成传输数据的通道。
- 在连接中进行大数据量传输。
- 通过三次握手连接,安全的协议。
- 三次握手:A发连接请求给B,B再发给A,A最后再发给B确定。
- 必须建立连接,效率会稍低。
六、Socket
- 可以把Socket看错码头,有了码头才能装货 (数据包)卸货。
- Socket是为网络服务提供的一种机制。
- 通信的两端都有Socket。数据在两个Socket间通过IO传输。
- 两个应用程序通过网络通信,可以把两个应用程序称为Socket。
- UDP
- UDP分为发送端和接受端
- 类DatagramSocket:发送、接受数据报包的套接字。
- 方法void receive(DatagramPacket p):从此套接字接受数据报包。
- 方法void send(DatagramPacket p):从此套接字发送数据报包。
- 类 DatagramPacket:此类表示数据报包。
- 数据报包用来实现无连接包投递服务。包中定义了发送信息和目的信息。
-
import java.net.*;
import java.io.*;
class TextClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("169.254.189.143",10006);
BufferedReader bufr =
new BufferedReader (new FileReader("IPDemo.java"));
PrintWriter out = new PrintWriter (s.getOutputStream(),true);
String line = null;
while ((line=bufr.readLine())!=null)
{
out.println(line);
}
s.shutdownOutput();//关闭客户端的输出流,相当于给流中加入一个结束标记。
// out.println("over");
BufferedReader bufIn =
new BufferedReader (new InputStreamReader(s.getInputStream()));
String str = bufIn.readLine();
System.out.println(str);
bufr.close();
s.close();
}
}
class TextServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10006);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".....conneted!");
//源:socket输入流
BufferedReader bufIn =
new BufferedReader (new InputStreamReader(s.getInputStream()));
//目的:文件
PrintWriter out =
new PrintWriter(new FileWriter("server.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();
}
}
/*
*/
- TCP
- TCP分为客户端和服务端。分别对应Socket、ServerSocket。
- TCP客户端的socket一旦建立成功,通路建立,产生了socket流。这个流可以读写,既有输入流getInputStream()也有输出流getOutputStream()。
- 服务端没有流对象,客户端有。服务端使用accept()方法获取到客户端socket对象后与客户端通信。使用客户端对象的读取流来读取数据。注意:数据源是网络流。
-
import java.net.*;
import java.io.*;
/*
演示tcp的传输的客户端和服务端的互访。
需求:客户端给服务端发送数据,服务端收到后,给客户的反馈信息。
*/
/*
客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送到服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
*/
class TcpClient2
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket ("169.254.189.143",10004);
OutputStream out = s.getOutputStream();
out.write("服务端,你好".getBytes());
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
}
class TcpServer2
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10004);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(ip+".....connected!");
System.out.println(new String(buf,0,len));
OutputStream out = s.getOutputStream();
out.write("哥们收到,你也好".getBytes());
s.close();
ss.close();
}
}
分享到:
相关推荐
56.CallableBondPricingby2-FactorHo-LeeModel1128.xls
56-56.渗透测试-什么是文件包含漏洞.mp4
资源来自pypi官网。 资源全名:spaceone_api-0.1.56.post11-py3-none-any.whl
资源来自pypi官网。 资源全名:spaceone_api-0.1.56.post10-py3-none-any.whl
python库。 资源全名:feature_flags_client-1.0.56.dev1-py3.8.egg
Accuinsight-1.0.56-py2.py3-none-any.whl.zip
osy56i-mz.121-1.T.bin 4 Mb c1600-oy-l.120-9.bin 5 Mb c1600-oy-mz-121-6.bin 3 Mb c1600-oy-mz.121-6.bin 3 Mb c1600-oy-mz.122-3.bin 3 Mb c1600-sy-l.112-4.XA 4 Mb c1600-sy-l.112-8.P 4 Mb c1600-sy-l.122-5....
资源来自pypi官网。 资源全名:flowetl-1.13.0.post0.dev56-py3-none-any.whl
GB/T 2423.1 -2008 GB/T 2423.2 -2008 GB/T 2423.3 -2016 GB/T 2423.4 -2008 GB/T 2423.5 -2019 GB/T 2423.6 -1995 GB/T 2423.7 -2018 GB/T 2423.8 -1995 GB/T 2423.9 -2001 GB/T 2423.10 -2019 ...
资源来自pypi官网。 资源全名:treeswift-1.0.56-py2.py3-none-any.whl
python库。 资源全名:alas_tools-1.3.56-py2.py3-none-any.whl
56-舒适型自动空调.pdf 57-座椅调节装置(舒适型).pdf 58-座椅调节装置(舒适型).pdf 59-标准型自动空调.pdf 60-挡风玻璃投影(平视显示).pdf 61-电视调谐器.pdf 62-电控机械式驻车制动器.pdf 63-电子转向柱调整...
TSOP14x20-56.STEP TSS0P-8.PNG TSS0P-8.STEP TSSOP-28.PNG TSSOP-28.STEP TSSOP-8.jpg TSSOP-8.PNG TSSOP-8.STEP TSSOP20.PNG TSSOP20.STEP TSSOP28.PNG TSSOP28.STEP User Library-PSSO-12.PNG User Library-PSSO-...