网站建设公司价格,免费制作二维码的网站,北京电商网站建设外包,部队网站建设建议网络编程三要素
ip地址#xff1a;计算机在网络中的唯一标识 端口#xff1a;应用程序在计算机中唯一标识 协议#xff1a;通信协议#xff0c;常见有UDP和TCP协议
InetAddress类
表示Internet协议地址 //返回InetAddress对象 InetAddress byName InetAddress.…网络编程三要素
ip地址计算机在网络中的唯一标识 端口应用程序在计算机中唯一标识 协议通信协议常见有UDP和TCP协议
InetAddress类
表示Internet协议地址 //返回InetAddress对象 InetAddress byName InetAddress.getByName(DESKTOP-1ET1T7L); //返回计算机名 String hostName byName.getHostName(); //返回Ip地址 String hostAddress byName.getHostAddress(); 端口 端口号用两个字节表示的整数它的取值范围是0~ 65535。其中0~1023之间的端口号用于一些知名的网络服务和应用普通的应用程序需要使用1024以上的端口号。如果端口号被占用会导致程序启动失败
协议 计算机网络中连接和通信的规则被称为网络通信协议
UDP协议 用户数据报协议(User Datagram Protocol) UDP是无连接通信协议即在数据传输时数据的发送端和接收端不建立逻辑连接 UDP协议消耗系统资源小通信效率高所以通常都会用于音频、视频和普通数据的传输
TCP协议 传输控制协议 (Transmission Control Protocol) TCP协议是面向连接的通信协议即传输数据之前在发送端和接收端建立逻辑连接然后再传输数据它提供了两台计算机之间可靠无差错的数据传输。 在TCP连接中必须要明确客户端与服务器端由客户端向服务端发出连接请求每次连接的创建都需要经过“三次握手”
三次握手 第一次握手客户端向服务器端发出连接请求等待服务器确认 第二次握手服务器端向客户端回送一个响应通知客户端收到了连接请求 第三次握手客户端再次向服务器端发送确认信息确认连接
UDP发送数据 Java提供了DatagramSocket类作为基于UDP协议的Socket
构造方法 相关方法 //创建一个发送数据Socket对象 DatagramSocket dsnew DatagramSocket(); //创建一个包用于存放要发送的数据 byte[] byshello.getBytes(); DatagramPacket dpnew DatagramPacket(bys,bys.length, InetAddress.getByName(127.0.0.1),8888); //发送数据 ds.send(dp); ds.close(); UDP接受数据
构造方法
方法名说明DatagramPacket(byte[] buf, int len)创建一个DatagramPacket用于接收长度为len的数据包
相关方法 //创建一个接收端的Socket对象 DatagramSocket dsnew DatagramSocket(8888); //创建一个接受数据的包 byte[] bysnew byte[1024]; DatagramPacket dpnew DatagramPacket(bys,bys.length); //接收数据 ds.receive(dp); //获取数据 byte[] data dp.getData(); //dp.getLength是接受到的数据长度 System.out.println(new String(data,0,dp.getLength())); ds.close(); UDP三种通讯方式
单播两个主机之间的端对通信
组播对一组特定的主机进行通信
广播一个主机对整个局域网所有主机通信
组播代码实现 //发送端 //创建发送端的Socket对象 DatagramSocket dsnew DatagramSocket(); //创建数据包 byte[] byshello.getBytes(); DatagramPacket dpnew DatagramPacket(bys,bys.length, InetAddress.getByName(224.0.1.1),8888); //发送 ds.send(dp); //释放资源 ds.close(); // //接收端 //创建一个接收端的Socket对象 MulticastSocket msnew MulticastSocket(8888); //创建一个接受数据的包 byte[] bysnew byte[1024]; DatagramPacket dpnew DatagramPacket(bys,bys.length); //把当前电脑绑定一个组播地址 ms.joinGroup(InetAddress.getByName(224.0.1.1)); //接收数据 ms.receive(dp); //获取数据 byte[] data dp.getData(); //dp.getLength是接受到的数据长度 System.out.println(new String(data,0,dp.getLength())); ms.close(); TCP发送数据 客户端用用Socket类 服务器端用ServerSocket类
Socket构造方法 相关方法方 //创建一个客户端Socket对象 Socket snew Socket(127.0.0.1,8888); //获取输出流输出数据 OutputStream outputStream s.getOutputStream(); outputStream.write(hello.getBytes()); //释放资源 s.close(); TCP接收数据
构造方法
方法名说明ServletSocket(int port)创建绑定到指定端口的服务器套接字
相关方法
方法名说明Socket accept()监听要连接到此的套接字并接受它 //创建服务器端ServerSocket对象 ServerSocket ssnew ServerSocket(8888); //监听 Socket accept ss.accept(); //创建一个输入流对象接收数据 InputStream inputStream accept.getInputStream(); byte[] bytesnew byte[1024]; int leninputStream.read(bytes); String data new String(bytes,0,len); System.out.println(data); accept.close(); ss.close(); 文件上传
从本地读取文件数据发送给服务器端 服务器端接受数据后保存到服务器本地 //客户端 //获取客户端Socket对象 Socket s new Socket(127.0.0.1, 8888); //从本地读取要上次的文件 BufferedInputStream bis new BufferedInputStream(new FileInputStream(JavaSE\\aa.jpg)); OutputStream os s.getOutputStream(); byte[] bys new byte[1024]; int i; while ((i bis.read(bys)) ! -1) { // os.write(i); os.write(bys, 0, i); } os.flush(); //给服务器一个结束标记标识已经传输完毕 s.shutdownOutput(); //获取服务器给回的信息 BufferedReader br new BufferedReader(new InputStreamReader(s.getInputStream())); String line; while ((line br.readLine()) ! null) { System.out.println(line); } //释放资源 bis.close(); s.close(); // //服务器端 //创建服务器ServerScoket对象 ServerSocket ss new ServerSocket(8888); //开始监听 Socket s ss.accept(); //接受客户端数据 InputStream is s.getInputStream(); //创建一个字符缓冲流保存接受的数据 BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(JavaSE\\bb.jpg)); int len; byte[] bys new byte[1024]; while ((len is.read(bys)) ! -1) { bos.write(bys, 0, len); } //告诉客户端已经接受完毕 s.shutdownInput(); //给客户端返回“上传成功信息” BufferedWriter bw new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write(上传成功); bw.newLine(); bw.flush(); //释放资源 bos.close(); s.close(); ss.close();