网络编程 IP地址 DNS 服务器 协议 socket套接字 通信模型 客户端/服务端

网络编程

IP地址的组成

四个8位的二进制数由三个“.”分割开来
为了好记,改写为十进制的;
IP地址= 网络地址+主机地址
1、网络地址:标识计算机或网络设备所在的网段
2、主机地址:标识特定主机或网络设备
分为:每个【】占8位
A类:【网络】 【主机】【主机】【主机】1~126
B类:【网络】【网络】 【主机】 【主机】128~191 
C类:【网络】【网络】【网络】  【主机】192~223
D类:用于组播通信			224~239
E类用于科研			240~255

cmd命令

使用ipconfig在cmd中查看的网络配置
使用ping+ip地址查看本机一次地址的主机网络是否通畅

DNS

Domain Name System,域名系统

服务器

通常指在网络环境下,具有较高的计算能力,能够提供用户服务功能的计算机
1、邮件服务器
2、web服务器

模式介绍

B/S: Browser/Server,浏览器/服务器模式
C/S: Client/Server,客户端/服务器模式

协议

为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
TCP/IP五层
1、物理层
2、数据链路层
3、网络层		ICMP	IGMP     IP       ARP     RARP
4、传输层		TCP     UDP
5、应用层		HTTP   FTP  TFTP   SMTP     SNMP    DNS

Socket

 通信链路的端点就被称为“套接字”
1、流式套接字(SOCK_STREAM)【基于TCP】
面向连接、可靠的数据传输服务
2、数据报式套接字(SOCK_DGRAM)【基于UDP】
无连接服务
3、原始式套接字(SOCK_RAW)

常用API

java.net包:
1、Socket
2、ServerSocket
3、DatagramPacket
4、DatagramSocket
5、InetAddress
.......

两种网络通信模型

基于TCP协议的Socket网络通信

	用来实现双向安全连接网络通信

Socket通信模型

进行网络通信时,Socket需要借助数据流来完成数据的传递工作

Socket网络编程的步骤:客户端/服务端(C/S)

1、建立连接
2、打开Socket关联的输入输出流
3、数据流中读写信息
4、关闭所有的数据流和Socket

详细步骤

1、user类:需要实现Serializable接口
2、服务器端:通过Socket.getInetAddress()获取InetAddress对象,再用getHostAddress()获取客户端IP
	创建ServerSocket对象
	ServerSocket serverSocket = new ServerSocket(设置端口号);
	//声明Socket获取ServerSocket的accept()方法
	Socket socket = serverSocket.accept();
	//获取Socket字节输入流方法
	InputStream is = socket.getInputStream();
	//创建对象输入流
	ObjectInputStream ois = new ObjectInputStream(参数是字节输入流);
	//创建要接受地对象,并调用readObject()方法
	User user = (User)ois. readObject();
	//打印输出
	System.out.print(user.toString());
3、客户端:
	//创建Socket对象,调用它的两个参数的构造方法
	Socket socket = new Socket(主机地址 , 端口号);//本机使用localhost,端口根据服务端所设置的端口进行输入
	//获取Socket的输出流
	OutputStream os = socket.getOutputStream();
	//创建对象输出流
	ObjectOutputStream oos = new ObjectOutputStream(字节输出流);
	//创建要传的对象
	User user = new User("admin","123456");
	//使用对象输出流写出对象
	oos.writeObject(user);
//服务器
public class LoginServer {
   
	public static void main(String[] args) {
   
		//建立服务器的socket,指定服务器的端口,开始监听
		ServerSocket serverSocket = null;
		//声明socket
		Socket socket = null;
		InputStream is = null;
		BufferedReader br = null;
		OutputStream os = null;
		BufferedWriter bw = null;
		try {
   
			//指定服务器的端口,开始监听
			serverSocket = new ServerSocket(8807);
			//创建socket对象
			socket = serverSocket.accept();
			//创建输入流,接收内容
			is = socket.getInputStream();
			//创建bufferedReader对象,并设置encoding
			br = new BufferedReader(new InputStreamReader(is));
			String str = null;
			//读取客户端的信息
			while((str = br.readLine())!=null){
   
				System.out.println("我是服务器,接受到的客户端信息为:"+str);
			}			
				os = socket.getOutputStream();
				//bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
				String replay = "登陆成功";
				os.write(replay.getBytes());
			
		} catch (IOException e) {
   
			e.printStackTrace();
		}finally{
   
			try {
   
				//关闭资源
				//bw.close();
				os.close();
				br.close();
				is.close();
				socket.close();
				serverSocket.close();
			} catch (IOException e) {
   
				e.printStackTrace();
			}			
		}
	}
}
//客户端
public class LoginClient {
   
	public static void main(String[] args) {
   
		OutputStream os = null;
		Socket socket = null;
		BufferedWriter bw = null;
		InputStream is = null;
		BufferedReader br = null;
		try {
   
			//建立客户端的socket连接,指定服务器的位置及端口
			socket = new Socket("localhost",8807);
			//打开输入输出流,创建输出流,写内容
			os = socket.getOutputStream(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值