当前位置: 首页 > 后端技术 > Java

网络编程

时间:2023-04-01 14:26:59 Java

网络编程是指编写运行在多个设备(计算机)上的程序,所有这些设备都通过网络连接。java.net包中的J2SEAPI由提供低级通信细节的类和接口组成。您可以直接使用这些类和接口来专注于解决问题而不是通信细节。java.net包提供了对两种常见网络协议的支持:TCP:TCP(英文:TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP层是一个中间层位于IP层之上,应用层之下。TCP保证两个应用程序之间的可靠通信。常用于因特网协议,称为TCP/IP。UDP:UDP(英文:UserDatagramProtocol,用户数据报协议),位于OSI模型的传输层。无连接协议。为要在应用程序之间发送的数据提供数据报。由于UDP缺乏可靠性并且是一种无连接协议,因此应用程序必须经常容忍一些丢失、错误或重复的数据包。本教程重点关注以下两个主题。套接字编程:这是使用最广泛的网络概念,并且有非常详细的解释。URL处理:这部分将在另一篇文章中介绍,单击此处了解有关Java语言中URL处理的更多信息。Socket编程套接字使用TCP提供了两台计算机之间的通信机制。客户端程序创建一个套接字并尝试连接到服务器的套接字。建立连接后,服务器会创建一个Socket对象。客户端和服务器现在可以通过写入和读取Socket对象进行通信。java.net.Socket类表示一个套接字,java.net.ServerSocket类为服务器程序提供一种机制来侦听客户端并与它们建立连接。当使用套接字在两台计算机之间建立TCP连接时,将发生以下步骤:服务器实例化一个ServerSocket对象,表示通过服务器上的端口进行的通信。服务器调用ServerSocket类的accept()方法,该方法将等待客户端连接到服务器上的给定端口。当服务器等待时,客户端实例化一个Socket对象,指定服务器名称和端口号以请求连接。Socket类的构造函数尝试将客户端连接到指定的服务器和端口号。如果建立了通信,则在客户端创建一个Socket对象,以便能够与服务器进行通信。在服务器端,accept()方法返回对服务器上连接到客户端套接字的新套接字的引用。连接建立后,使用I/O流进行通信。每个套接字都有一个输出流和一个输入流。客户端的输出流连接到服务器的输入流,客户端的输入流连接到服务器的输出流。TCP是一种双向通信协议,因此可以同时通过两个数据流发送数据。下面是一些实现socket的类提供的一整套有用的方法。ServerSocket类的方法服务器应用程序使用java.net.ServerSocket类来获取端口并侦听客户端请求。ServerSocket类有四种构造方法:序号方法说明1publicServerSocket(intport)throwsIOException创建一个绑定到特定端口的服务器套接字。2publicServerSocket(intport,intbacklog)throwsIOException用指定的backlog创建一个服务器套接字并将其绑定到指定的本地端口号。3publicServerSocket(intport,intbacklog,InetAddressaddress)throwsIOException创建具有指定端口、侦听积压和要绑定的本地IP地址的服务器。4publicServerSocket()throwsIOException创建一个未绑定的服务器套接字。创建一个未绑定的服务器套接字。如果ServerSocket构造函数没有抛出异常,则说明你的应用已经成功绑定到指定端口,正在监听客户端请求。以下是ServerSocket类的一些常用方法:序号方法说明1publicintgetLocalPort()返回此套接字正在侦听的端口。2publicSocketaccept()throwsIOException侦听并接受到此套接字的连接。3publicvoidsetSoTimeout(inttimeout)通过指定以毫秒为单位的超时值来启用/禁用SO_TIMEOUT。4publicvoidbind(SocketAddresshost,intbacklog)将ServerSocket绑定到特定地址(IP地址和端口号)。Socket类的方法java.net.Socket类表示客户端和服务器用来相互通信的套接字。客户端通过实例化获得一个Socket对象,服务端通过accept()方法的返回值获得一个Socket对象。Socket类有五个构造方法。序号方法说明1publicSocket(Stringhost,intport)throwsUnknownHostException,IOException。创建流套接字并将其连接到指定主机上的指定端口号。2publicSocket(InetAddresshost,intport)throwsIOException创建一个流套接字并将其连接到指定IP地址的指定端口号。3publicSocket(Stringhost,intport,InetAddresslocalAddress,intlocalPort)抛出IOException。创建套接字并将其连接到指定远程主机上的指定远程端口。4publicSocket(InetAddresshost,intport,InetAddresslocalAddress,intlocalPort)抛出IOException。创建套接字并将其连接到指定远程地址上的指定远程端口。5publicSocket()通过系统默认类型SocketImpl创建一个未连接的套接字,当Socket构造函数返回时,它并不是简单地实例化一个Socket对象,它实际上会尝试连接到指定的服务器和端口。下面列出了一些感兴趣的方法,注意客户端和服务器都有一个Socket对象,因此客户端和服务器都可以调用这些方法。No.方法描述1publicvoidconnect(SocketAddresshost,inttimeout)throwsIOException将此套接字连接到服务器并指定超时值。2publicInetAddressgetInetAddress()返回套接字连接的地址。3publicintgetPort()返回此套接字连接到的远程端口。4publicintgetLocalPort()返回此套接字绑定的本地端口。5publicSocketAddressgetRemoteSocketAddress()返回此套接字连接到的端点的地址,如果未连接则返回null。6publicInputStreamgetInputStream()throwsIOException返回此套接字的输入流。7publicOutputStreamgetOutputStream()throwsIOException返回此套接字的输出流。8publicvoidclose()throwsIOException关闭这个套接字。InetAddress类的方法此类表示Internet协议(IP)地址。Socket编程比较有用的方法如下:序号方法说明1staticInetAddressgetByAddress(byte[]addr)返回给定原始IP地址时的InetAddress对象。2staticInetAddressgetByAddress(Stringhost,byte[]addr)根据提供的主机名和IP地址创建一个InetAddress。3staticInetAddressgetByName(Stringhost)确定给定主机名的主机的IP地址。4StringgetHostAddress()返回IP地址字符串(以文本表示形式)。5StringgetHostName()获取此IP地址的主机名。6staticInetAddressgetLocalHost()返回本地主机。7StringtoString()将此IP地址转换为字符串。Socket客户端实例如下GreetingClient是一个客户端程序,通过socket连接到服务器端,发送请求,然后等待响应。GreetingClient.java文件代码://文件名GreetingClient.javaimportjava.net.*;importjava.io.*;publicclassGreetingClient{publicstaticvoidmain(String[]args){StringserverName=args[0];intport=Integer.parseInt(args[1]);try{System.out.println("连接主机:"+serverName+",端口号:"+port);套接字客户端=新套接字(服务器名,端口);System.out.println("远程主机地址:"+client.getRemoteSocketAddress());OutputStreamoutToServer=client.getOutputStream();DataOutputStreamout=newDataOutputStream(outToServer);out.writeUTF("你好来自"+client.getLocalSocketAddress());InputStreaminFromServer=client.getInputStream();DataInputStreamin=newDataInputStream(inFromServer);System.out.println("服务器响应:"+in.readUTF());客户端.close();}catch(IOExceptione){e.printStackTrace();}}}Socket服务器实例下面的GreetingServer程序是一个服务器端应用程序,它使用Socket来监听一个指定的港口GreetingServer.java文件代码://文件名GreetingServer.javaimportjava.net.*;importjava.io.*;publicclassGreetingServerextendsThread{privateServerSocketserverSocket;publicGreetingServer(intport)抛出IOException{serverSocket=newServerSocket(port);serverSocket.setSoTimeout(10000);}publicvoidrun(){while(true){try{System.out.println("等待远程连接,端口号为:"+serverSocket.getLocalPort()+"...");套接字服务器=serverSocket.accept();System.out.println("远程主机地址:"+server.getRemoteSocketAddress());DataInputStreamin=newDataInputStream(server.getInputStream());系统输出。println(in.readUTF());DataOutputStreamout=newDataOutputStream(server.getOutputStream());out.writeUTF("感谢连接我:"+server.getLocalSocketAddress()+"\n再见!");服务器.close();}catch(SocketTimeoutExceptions){System.out.println(“套接字超时!”);休息;}catch(IOExceptione){e.printStackTrace();休息;}}}publicstaticvoidmain(String[]args){intport=Integer.parseInt(args[0]);尝试{Threadt=newGreetingServer(port);t.run();}catch(IOExceptione){e.printStackTrace();}}}

最新推荐
猜你喜欢