java网络编程

it2025-01-16  19

一、理论知识 理论 1.软件结构 c/s结构客户端 B/s结构浏览器 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。“网络编程”就是在一定协议下,实现两台计算机的通信的程序。 传输层TCP协议和UDP协议。协议就是规则。 2.TCP协议(效率低,安全) TCP协议是面向连接的通信协议。即传输数据之前,在发送端和客户端建立逻辑连接,然后再传输数据,它提供两台计算机之间可靠无差错的数据传输。 三次握手 第一次握手:客户端向服务器发出连接请求,等待服务器确认。 第二次握手:服务器端向客户回送一个响应,通知客户端收到了连接请求。 第三次握手:客户端再次向服务器端发送确认信息,确认连接。 3.UDP(效率高,不安全) 用户数据报协议。UDP是 通信协议。耗资小,通信效率高。 偶尔丢失数据包。特点:数据被限制64kb以内。 4.网络编程三要素 协议,IP地址(唯一编号),端口号 一些操作 1.查看本机:ipconfig 2.检查网络是否连通:Ping 空格 ip地址 3.127.0.0.1,localhost代表你自己的ip地址。 4.端口号(逻辑端口无法直接看到,当我们使用网络软件,操作系统就会为软件分配随机的端口号)。端口号有两个字节组成。取值范围在0~65535之间。1024之前端口号我们不能使用,已被系统分配,不能重复。 5.我们使用ip地址加端口号,可以保证准确无误发送到对方的端口号。 6.常用端口号, 1.80端口网络端口号 2.数据库 mysql:3306 oracle:1521 3.Tomcat服务器:8080

二、TCP Socket编程 Socket又称为”套接字”,Java应用程序通过套接字向网络发出请求或应答网络请求。 以输入、输出流方式通信(InputStream和OutputStream) 在java中,ServerSocket和Socket都集中存放在java.net包中。 ServerSocket类对象用于监听来自客户端的Socket连接,若没连接一直处于等待状态。

传统单线程Socket编程 01服务器端 服务器的实现一般步骤: 1.创建服务器Serversocket对象和系统要指定的端口号 2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket 3.使用Socket对象中的方法getInputstream()获取网络字节输入流Inputstream对象 4.使用网路字节输入流Inputstream对象中的方法read,读取客户端发送的数据 5.使用Socket对象中的方法getoutputstream()获取网络字节输出流OutputStream对象 6.使用网络字节输出流Outputstream对象中的方法write,给客户端回写数据(这里使用的是PrintStream) 7.释放资源(Socket,Serversocket)

import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class ServerSocketTest { public static void main(String[]args)throws Exception{ System.out.println("服务器端程序启动....."); //服务器端程序监听8801串口 ServerSocket ss =new ServerSocket(8801); while(true) { Socket socket = ss.accept(); //无客户端访问,阻塞访问 //有客户端访问8801端口,返回Socket对象(客户端的IP地址和端口号) String sip = socket.getLocalAddress().toString();//服务器端IP int sport = socket.getLocalPort(); //服务器端端口号8801 String cip = socket.getRemoteSocketAddress().toString(); int cport = socket.getPort(); //客户端端口 PrintStream ps = new PrintStream(socket.getOutputStream()); ps.println("同志们好"); Scanner sc = new Scanner(socket.getInputStream()); System.out.println("客户端"+cip+":"+cport+"说:"+sc.nextLine()); } } }

02客户端 实现一般步骤: 1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号 2.使用Socket对象中的方法getOutputStreom()获取网络字节输出流OutputStream对象 3.使用网络字节输出流OutputStream对象中的方法rite,给服务器发送数据 4.使用Socket对象中的方法getInputStream()获取网络字节输入流Input Stream对象 5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据(这里使用的是PrintStream) 6.释放资源(Socket)

import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class SocketTest { public static void main(String[] args) throws Exception { //连接到127.0.0.1:8801的服务器端程序 Socket socket = new Socket("127.0.0.1",8801); InputStream is = socket.getInputStream(); Scanner sc = new Scanner(is); String s = sc.nextLine(); System.out.println("服务器端说:"+s); PrintStream ps = new PrintStream(socket.getOutputStream()); ps.println("首长好!"); ps.flush(); ps.close(); } }

运行结果如下图 注意: 1.客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象 2.当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路 这时如果服务器没有启动,那么就会抛出异常,如果服务器已经启动,那么就可以进行交互了。 3.两端通信时步骤: 01.服务端程序,需要事先启动,等待客户端的连接。 02.客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。

多线程编程 先运行服务器,在运行客户端,多线程服务器可以运行多个客户端。 单击控制台上按钮可以查看,多个控制台窗口的具体情况。 服务器端 客户端1 客户端2

三、从客户端上传文件到服务器 客户端和服务器除了可以发送字符串信息外,还可以发送文件和对象。 关键知识: 1.while(true){}循环让服务器一直处于监听状态,方便上传多个文件。 2.自定义文件名称规则,防止同名的文件被覆盖。 例:SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddhhmmss”); 3.读取文件 int len= 0; byte [] ba = new byte[1024]; while((len==is.read(ba))!=-1){ fos.write(ba,0,len); } 4.客户端,针对阻塞状态,上传文件,给服务器写一个结束标记。 socket.shutdownOutput();

四、UDP Socket编程 Java 在java.net包中提供了DatagramSocket和DatagramPacket两个类,用来支持数据报通信的编程。 DatagramSocket类 DatagramSocket(数据报套接字)用于在Java程序之间建立传送数据报的通信连接,DatagramSocket表示用来发送和接收数据报的Socket。数据报套接字是包投递服务的发送点和接收点。 DategramPacket类 无论是发送UDP包还是接受UDP包,都要通过DatagramPacket类的对象。 发送的数据包: DatagramPacket类必须包含待发送的数据以及数据包要到达的IP地址和端口号。 接受UDP的数据包: 创建一个DatagramPacket对象,以便存放接受到的数据及其相关的信息。 发送数据还是接收数据都将使用byte[]来充到缓冲区。

小技巧:通过电脑管家-工具箱-网络连接可以查看IP、端口号,TCP/UDP

最新回复(0)