Java基础总结之网络编程

网络编程:用Java语言实现计算机间数据的信息传递和资源共享。

网络模型:七层:(从上至下)分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

网络编程的三要素:ip、端口、协议

ip:网络中计算机的唯一标识。Ip在计算机底层是由二进制所表示的,但是为了方便,人们用“点分十进制”(将二进制文件做换为十进制,再用.分开)表示IP。Ip地址的组成:网络号+主机号。如何查看自己的ip:ipconfig。如何测试IP通不通:ping

几个特殊的IP地址:127.0.0.1 回环地址(表示本机) x.x.x.255广播地址  x.x.x.0网络地址

端口:是应用程序的标识,范围为0--65535.

协议:UDP和TCP

UDP:数据打包,有限制,不连接,效率高,不可靠

TCP:建立数据通道,无限制,效率低,可靠

Socket机制:

A:通信的两端都应该有Socket对象

B:所有的通信都是通过Socket间的IO进行操作的

UDP协议发送和接收数据:

发送:创建UDP发送端的Socket对象---创建数据并把数据打包---发送数据---释放资源

接收:创建UDP接收端的Socket对象---创建数据包用于接收数据---接收数据---解析数据包---释放资源

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/*
 *UDP协议发送数据
 *A:创建发送端socket
 *B:创建数据,并把数据打包
 *C:调用Socket的方法发送数据包
 *D:释放资源
 */
public class Send {

	public static void main(String[] args) throws IOException {
		// 创建发送端 socket
		DatagramSocket ds = new DatagramSocket();
		// 创建数据,并把数据打包,包的值最大64K
		byte[] buf = "UDP简单应用".getBytes();
		// InetAddress address=InetAddress.getByName("192.168.31.233");
		DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.31.233"), 12306);
		// 发送数据
		ds.send(dp);
		// 释放资源
		ds.close();
	}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * UDP协议接收数据 A:创建接收端socket B:创建一个数据包(接收容器) C:调用Socket的接收方法接收数据包 D:解析数据包并显示在数据台
 * E:释放资源
 */
public class Receive {

	public static void main(String[] args) throws IOException {
		// 创建接收端Socket对象
		DatagramSocket ds = new DatagramSocket(12306);
		// 创建数据包(接收容器)
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		// 调用Socket的接收方法接收数据包
		ds.receive(dp);
		// 解析数据包
		System.out.println(
				"From" + dp.getAddress().getHostAddress() + "的数据:" + new String(dp.getData(), 0, dp.getLength()));
		// 释放资源
		ds.close();
	}
}

 TCP协议发送和接收数据:

发送:创建TCP客户端的Socke对象---获取输出流,写数据---释放资源

接收:创建TCP服务器端的Socket对象---见听客户端连接---获取输入流,读数据---释放资源

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {//客户端

	public static void main(String[] args) throws IOException {
		// 创建Socket对象
		Socket s = new Socket("192.168.31.233", 2080);
		// 得到输出流,进行写数据
		OutputStream os = s.getOutputStream();
		os.write("Is-Me-HL".getBytes());
		// 释放资源
		s.close();
	}

}
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {//服务器端

	public static void main(String[] args) throws IOException {
		// 创建ServerSocket对象
		ServerSocket ss = new ServerSocket(2080);
		// 监听客户端,返回一个对应的Socket对象
		Socket s = ss.accept();
		// 得到输入流对象
		InputStream is = s.getInputStream();
		// 打印信息
		byte[] bys = new byte[1024];
		int len = is.read(bys);
		String message = new String(bys, 0, len);
		System.out.println(message);
		// 关闭资源
		ss.close();
	}

}

上面是对UDP和TCP协议的简单使用做一个基础的总结,实际上我们可以结合多线程的知识,完成更为人性化,用户体验感倍增的网络程序。


注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教。

猜你喜欢

转载自blog.csdn.net/m0_37265215/article/details/81842457