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

网络编程简单学习

2018-01-06 13:24 127 查看
什么是网络:网络是信息传输、接收、共享的虚拟平台,它用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。网络会借助文字阅读、图片查看、影音播放、下载传输、游戏聊天等软件工具从文字、图片、声音、视频,等方面给用户提供服务,具有多点性、连结性、交互性和快速性等特点。(来自搜狗百科)。

OSI七层模型:(搜狗百科OSI七层模型



第一层:物理层(使用物理连接媒介,提供物理连接,使用比特流传输)
第二层:数据链路层(控制网络层和物理层之间的通信,它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的网络地址以及纠错和控制信息。)
第三层:网络层(将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。)
第四层:传输层(实现网络上不同主机之间的通信,TCP及UDP都是该层的传输协议)
第五层:会话层( 负责在网络中的两节点之间建立和维持通信。功能包括:建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对
话,决定通信是否被中断以及通信中断时决定从何处重新发送。)
第六层:表示层(应用程序和网络的翻译官,数据将按照网络能理解的方案进行格式化;这种格式化也因所使用网络的类型不同而不同。)
第七层:应用层( 负责对软件提供接口以使程序能使用网络服务。)

IP:IP是英文Internet Protocol的缩写,意思是“网络之间互联的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。(来自搜狗百科);IP地址:IP地址(英语:Internet
Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。(用来唯一标识网络终端)。

端口:计算机"端口"是英文port的意译,可以认为是计算机与外界通讯交流的出口。(每一个应用程序的端口号不能重复,用来识别某个终端中运行的一个应用;每一个IP中可以同时使用65535个端口;)。

TCP协议:传输控制协议(Transmission
Control Protocol),是一种基于连接的传输层协议,安全可靠。通信双方都有双向字节流,通过字节流的方式进行通讯。(类似于打电话)

UDP协议:用户数据报协议(User
Datagram Protocol),是一种无连接的传输层协议,不可靠,但是速度快,传输效率高。通过传输数据包的方式进行通讯。

InetAddress类:表示IP地址
InetAddress.getByName():根据字符串获得一个IP地址
InetAddress.getLocalHost():获得本机的IP地址

TCP协议的常用类
ServerSocket:服务器端的套接字
Socket:套接字
TCP程序开发的步骤

服务端创建一个ServerSocket,并接受客户端的连接请求;
accept();
客户端发送连接请求 new Socket();
服务端接收到客户端的连接请求,并返回一个与之对应的Socket;
getInputStream();
getOutputStream();

练习
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class Celient {

public static void main(String[] args) throws Exception, Exception {

Scanner s=new Scanner(System.in);
//创建一个客户端,端口为0325
Socket socket=new Socket(InetAddress.getLocalHost(),0325);
//获得一个文本输出流
PrintWriter p=new PrintWriter(socket.getOutputStream());
String str=null;
do {
System.out.println("你说:");
str=s.nextLine();
//输出文本内容
p.println(str);
//刷新
p.flush();
}while(!str.equals("exit")) ;

//关闭资源
s.close();
socket.close();
}

}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

public static void main(String[] args) throws Exception {
//创建一个服务器ServerSocket,端口0325
ServerSocket server=new ServerSocket(0325);
System.out.println("等待连接.....");
// 侦听并接受到此套接字的连接。
Socket s=server.accept();
//将字节转换成字符
Reader reader=new InputStreamReader(s.getInputStream());
BufferedReader bf=new BufferedReader(reader);

String str=null;
while(!(str=bf.readLine()).equals("exit")) {
System.out.println("对方正在说:"+str);
}

System.out.println("数据接收完毕");
server.close();
}

}


UDP程序开发

没有明确的客户端和服务端,任何一方都可以作为服务端和客户端;

UDP的套接字是DatagramSocket,创建这个套接字,它可以用来接收DatagramPacket和发送DatagramPacket;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP模拟接收数据
*
*/
public class Reciver {

public static void main(String[] args) throws Exception {
//每次接收的数据最大长度
byte[] b=new byte[1024];
//创建DatagramSocket,端口为220
DatagramSocket ds=new DatagramSocket(220);
//创建数据包
DatagramPacket dp=new DatagramPacket(b,b.length);
System.out.println("准备接收......");
//接收数据
ds.receive(dp);

//输出数据内容
System.out.println("长度:"+dp.getLength());
System.out.println("端口:"+dp.getPort());
System.out.println(b.length);
//将实际数据长度的内容转换为字符串
System.out.println(new String(b,0,dp.getLength()));
//关闭资源
ds.close();

}

}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDP协议测试发送数据
*
*/
public class Sender {

public static void main(String[] args) throws Exception {

//要发送的数据
String str="你好啊骚年!";
//创建一个DatagramSocket,端口为325
DatagramSocket ds=new DatagramSocket(325);
//将要发送的数据转换为数据包,包含的信息有数据内容,字符串长度,发送给的IP地址,以及程序的端口
DatagramPacket dp=new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getLocalHost(),220);
System.out.println("准备发送......");
//发送数据
ds.send(dp);
System.out.println("对方已经成功接收");
//关闭资源
ds.close();
}

}
测试结果:

准备接收......
长度:12
端口:325
1024
你好啊骚年!

URL类:统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Url {

public static void main(String[] args) throws MalformedURLException {

//创建URL实例
URL  url=new URL("http://www.163.com");
try {
//打开url的连接
URLConnection urlc=url.openConnection();
//获得字符缓冲流
BufferedReader br=new BufferedReader(new InputStreamReader(urlc.getInputStream()));
String str=null;
//读取内容
while((str=br.readLine())!=null) {
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

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