二十五、网络编程

						**网络编程**

一、理解网络编程的概念
1.网络:传输资料,共享信息,网上订餐,买车票,订酒店,上网玩游戏,插上网线就有忘了,连接无线。。。。
2.在我们网络中的网络划分:
①局域网
②城域网
③广域网
④互联网
二、理解IP,端口和服务的概念
1.IP:网络地址,计算机在网络中的唯一标识也可以理解成身份证,在同一个网络里面是没有一个重复的IP的,并且注意,我们的IP是动态的。(通俗理解就像是你去网吧,你想玩电脑,那么就需要分配给你一个电脑一样了。)
2.IP是有4个8位的二进制组成的,类似于0000000000.111111000;
3.后来二进制不容易记住就采用了十进制来标识:192.168.31.170.,最大的IP是多少呢?255.255.255.255.255遵循某个互联网协议产生的标识
4.查看本机的IP:在DOS命令中输入ipconfig然后回车
5.测试网络连通:同样在DOS命令中输入ping然后输入对方法的IP,这样就可以查看你俩的网络是否是通常的
6.我们发现我们平时访问的一些网站的时候,并没与输入ip地址,二十输入了自定义的域名(域名是唯一的),同样可以进行网站的访问
7.域名解析系统:因为10进制IP也不好记忆,所以产生了个性化的域名。域名通过域名解析系统能找到真实的机器IP(我们找到的访问系统的IP是静态的)
8.简单的了解一下一些后缀的解释
com是商业公司
cn是中国的公司
org是非盈利组织
edu是教育机构
gov是教育机构

9.端口:程序运行需要占用计算机的端口号,我们如果通过IP找到某台计算机,还必须要通过自定的端口来访问某个程序,达到共享,交流的目的。()
10.我们如果想要访问百度
①我们必修先连接上网路偶的节点,分配一个上网表示IP
②知道百度的域名和端口,然后通过一些程序进行访问,
③当访问此域名时,网络运营商的域名解析器就会进行解析,解析为正确的百度程序所在的服务器的IP地址
④找到了IP之后,又因为HTP协议,默认的端口是80,所以我们就可以访问到身在未知之处的某台计算机上的百度程序了。
⑤百度给你相应的结果

11.*服务器和服务器*
	①硬件服务器:百度程序运行所在的机器。(配置更高,专用于运行百度相管程序的主机。因为他们是要给用户提供服务的,所以叫做服务器)
	②软件服务器:运行在硬件服务器上的,用于帮助企业程序对外提供访问的软件,例如:Tomcat,  Apache  , WebLogic  ,jBoss  ,Jetty  Ngin   Tengin 等等

三、理解TCP和UDP的概念
TCP:(Traamission control protocal)传输控制协议,它是面向连接的,可靠的,但是它的传输效率慢,但是它的传输准确,因为他是通过字节流进行传输协议的
UDP:(user DataGram protocal):用户通报协议。它的运行是不需要进行连接协议的,在传输数据的时候,客户和服务器是不需要进行连接的。它的传输效率高,但是准确不保证,在视频的传输的时候,一把用UDP进行传输。

四、基于TCP协议进行网络编程
package cn.kgc.demo1;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {

public static void main(String[] args) {
	Socket socket = null;
	OutputStream os = null;
	BufferedWriter br = null;
	try {
		// ------------------send request---------------------
		// 本机回环地址:localhost   127.0.0.1
		// 1.指定服务端的IP和端口号
		socket = new Socket("localhost", 9090);
		// 2.调用输出流发送数据
		os = socket.getOutputStream();
		br = new BufferedWriter(new OutputStreamWriter(os));
		br.write("我是客户端!服务端你收到了吗?");
		// ------------------// send request------------------
		
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		try {
			// 3.关流
			br.close();
			os.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

}

package cn.kgc.demo1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 基于TCP的服务端
 * @author 9212
 * 2019年3月8日 上午10:55:44
 */
public class TCPServer {

	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		Socket accept = null;
		InputStream is = null;
		BufferedReader br = null;
		try {
			// ----------------receive request------------------
			// 1.指定端口号
			serverSocket = new ServerSocket(9090);
			// 2.开启服务  准备接收客户端的请求
			accept = serverSocket.accept();
			// 3.通过输入流 读取数据
			is = accept.getInputStream();
			// 为了方便读取文本数据,转换为高效字符流
			br = new BufferedReader(new InputStreamReader(is));
			String msg = null;
			while((msg = br.readLine()) != null) {
				System.out.println(msg);
			}
			// ----------------// receive request----------------
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			// 4.关流
			try {
				br.close();
				is.close();
				accept.close();
				serverSocket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	
}

五、基于UDP进行网络编程
package cn.kgc.demo4;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class UDPClient {

public static void main(String[] args) {
	DatagramSocket datagramSocket = null;
	try {
		// 1.指定服务端 端口和IP
		byte[] buf = "我是基于UDP发送的数据!".getBytes();
		// 根据指定的IP或主机  获取InetAddress对象
		// InetAddress address = InetAddress.getByName("localhost");
		// 获取以本机IP/主机为构造的InetAddress对象
		InetAddress address = InetAddress.getLocalHost();
		DatagramPacket dp = new DatagramPacket(buf , buf.length, address , 8080);
		
		// 2.创建数据包发送对象
		datagramSocket = new DatagramSocket();
		// 3.发送数据包
		datagramSocket.send(dp);
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		datagramSocket.close();
	}
	
	
}

}

package cn.kgc.demo4;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * DatagramSocket:用来接收和发送数据包
 * DatagramPacket:数据包  用来存储数据的
 * @author 9212
 * 2019年3月8日 下午12:01:35
 */
public class UDPServer {

	public static void main(String[] args) {
		DatagramSocket datagramSocket = null;
		try {
			// 1.指定端口
			datagramSocket = new DatagramSocket(8080);
			// 2.创建数据包 来准备接收数据
			byte[] buf = new byte[1024];
			DatagramPacket datagramPacket = new DatagramPacket(buf ,buf.length);
			// 3.接收客户端的数据
			datagramSocket.receive(datagramPacket);
			
			// 4.操作数据包
			byte[] data = datagramPacket.getData();
			String msg = new String(data);
			System.out.println(msg);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 5.关流
			datagramSocket.close();
		}
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88351363