您的位置:首页 > 理论基础 > 计算机网络

Java-网络编程(第一天)

2018-03-03 23:05 148 查看
什么是网络?
网络就像是虚拟的运输网,将单独的pc连接进行信息的交互与传输。因此它包含的知识点与规范很多。国际组织将网络分解成多层进行结构划分,功能明确。
 网络模型●OSI(Open System interconnection)开放系统互联 

●TCP/IP



OSI七层简介:物理层:就是网线、光纤、无线、蓝牙将两个pc连接。(传输形式:0、1比特位)
数据链路层:将物理层接收到的数据进行MAC地址(网卡成产是带的地址,唯一)的封装或解封装。设备:交换机:传输数据
网络层:ip地址(192.168.1.1)的封装或解封装。设备:路由器(告诉数据路径通过那个路径②到①)
传输层:在网络层数据知道去哪了,那么怎么去?传输层制订了一些传输数据的协议和端口号。TCP(传输控制协议):传输效率低,可靠性高。UDP(用户数据报协议):传输可靠性低
⑤ 会话层:通过传输层给的端口号(传输端口与接收端口)建立数据传输通路。开始会话,也就是你的pc发起会话或者接受会话。(就是两个pc通过ip或则MAC或者主机名进行相互认识的过程)
表示层:对接收数据的数据进行解释,加密或解密、压缩或解压缩的过程。把二进制数据转换成人类识别的文字图片的过程
应用层:就是指的浏览器、qq之类的应用软件。
我们以传输图片为例:



OSI七层在实际操作过程中太过于繁琐,所以将一些过程进行整合出现TCP/IP协议(四层)



网络通讯(三要素)IP地址、端口号、传输协议。





DNS(域名系统):建立连接必需通过ip地址,但是ip地址又不太好记,因此给每个ip地址一个域名,我们通过访问域名,通过域名解析得到对应的ip地址,进行连接通讯。



Socket(通讯端点【专业术语:套接字】):任何要进行数据传输的(源pc与目的pc)都要有Socket才能进行数据的传输。



通过上面的传输流程与规则,JAVA封装了一些对象用于完成网络传输。
IP对象:InetAddress 



UDP传输:

DatagramSocket类:创建通讯端点,为数据传输提供前提。
DatagramPacket类:将数据打包,抛出数据包进行传输。

聊天室小demo
public class Send implements Runnable {
private DatagramSocket ds;
public Send(DatagramSocket ds){
this.ds=ds;
}
@Override
public void run() {
try{
String line=null;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while((line=br.readLine())!=null){
byte[]buf=line.getBytes();
DatagramPacket packet=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),8800);
ds.send(packet);
if("886".equals(line)){
break;
}
}
ds.close();
}catch (Exception e) {
}

}
}

public class Rece implements Runnable{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
@Override
public void run() {
try{
while(true){
byte[]buf=new byte[1024];
DatagramPacket packet=new DatagramPacket(buf, buf.length);
ds.receive(packet);
String date=new String(packet.getData(),0,packet.getLength());
System.out.println(date);
if(date.equals("886")){
System.out.println(packet.getAddress().getHostAddress()+"....退出聊天室");
}
}
}catch (Exception e) {
}
}
}
public class TackHose {
public static void main(String[]args) throws SocketException{
DatagramSocket send = new DatagramSocket();
DatagramSocket rece = new DatagramSocket(8800);
Send s=new Send(send);
Rece r=new Rece(rece);
Thread t1=new Thread(s);
Thread t2=new Thread(r);
t1.start();
t2.start();
}
}
TCP传输Socket:客户端通讯端点
ServerSocket:服务端通讯端点
案例:public static void main(String[] args) throws UnknownHostException, IOException {

/*
* 思路:
* 客户端:
* 1,需要先有socket端点。
* 2,客户端的数据源:键盘。
* 3,客户端的目的:socket.
* 4,接收服务端的数据,源:socket。
* 5,将数据显示在打印出来:目的:控制台.
* 6,在这些流中操作的数据,都是文本数据。
*
*
* 转换客户端:
* 1,创建socket客户端对象。
* 2,获取键盘录入。
* 3,将录入的信息发送给socket输出流。
*/
//1,创建socket客户端对象。
Socket s = new Socket("192.168.1.100",10004);
//2,获取键盘录入。
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//3,socket输出流。
// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//4,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);
//读取服务端发回的一行大写数。
String upperStr = bufIn.readLine();
System.out.println(upperStr);
}
s.close();

}

}
public static void main(String[] args) throws IOException {
/*
*
* 转换服务端。
* 分析:
* 1,serversocket服务。
* 2,获取socket对象。
* 3,源:socket,读取客户端发过来的需要转换的数据。
* 4,目的:显示在控制台上。
* 5,将数据转成大写发给客户端。
*/
//1,
ServerSocket ss = new ServerSocket(10004);
//2,获取socket对象。
Socket s = ss.accept();
//获取ip.
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected");
//3,获取socket读取流,并装饰。
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
//4,获取socket的输出流,并装饰。
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String line = null;
while((line=bufIn.readLine())!=null){
System.out.println(line);
out.println(line.toUpperCase());
}
s.close();
ss.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: