Java 网络编程总结

目录
  • 1、IP地址
  • 2、端口
  • 3、通信协议
    • 3.1 TCP/IP协议簇:实际上是一组协议
    • 3.2 TCP UDP对比
    • 3.3 TCP实现聊天
    • 3.4 TCP文件上传
    • 3.5 UDP消息发送
    • 3.6 UDP聊天实现

1、IP地址

IP地址IntAddress:

  • 唯一定位一台网络上的计算机
  • 127.0.0.1:本地localhost
  • IP地址的分类

ipV4/ipV6

  • ipV4:127.0.0.1,4个字节组成;0~255,42亿~;30亿都在北美,亚洲4亿;2011年就用完了
  • ipV6:128位。8个无符号整数

公网(互联网)-私网(局域网)

  • ABCD类地址
  • 192.168 .xx.xx,专门给组织内部使用的

域名:方面记忆,免去了记录IP的问题

 1 //测试IP
 2 public class TestInetAddress {
 3     public static void main(String[] args) {
 4         try {
 5             //查询本机地址
 6             InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
 7             System.out.println(inetAddress);
 8             InetAddress localhost = InetAddress.getByName("localhost");
 9             System.out.println(localhost);
10             InetAddress localHost = InetAddress.getLocalHost();
11             System.out.println(localHost);
12
13             //查询网站ip地址
14             InetAddress inetAddress1 = InetAddress.getByName("www.baidu.com");
15             System.out.println(inetAddress1);
16
17             //常用方法
18             System.out.println(inetAddress1.getHostAddress());//ip
19             System.out.println(inetAddress1.getHostName());//域名,或者自己的名字
20         } catch (UnknownHostException e) {
21             e.printStackTrace();
22         }
23     }
24 }

2、端口

ip相当于省/市/区/街/楼,端口就是门牌号;端口表示计算机上的一个程序的进程

  • 不同的进程有不同的端口号!用来区分软件!
  • 被规定0~65535
  • TCP,UDP:65535*2;tcp:80;udp:80
  • 端口分类

端口分类:

  • 公有端口0~1023
  • HTTP:80
  • HTTPS:443
  • FTP:21
  • Telent:23

程序注册端口:1024~49151,分配用户或者程序

  • Tomcat:8080
  • MySQL:3306
  • Orcal:1521

动态、私有:49152~65535

//CMD
netstat -ano #查看所有的端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|findstr "8696" #查看指定端口的进程
 1 //端口
 2 public class TestInetSocketAddress {
 3     public static void main(String[] args) {
 4         InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);
 5         System.out.println(socketAddress);
 6
 7         System.out.println(socketAddress.getAddress());
 8         System.out.println(socketAddress.getHostName());//地址
 9         System.out.println(socketAddress.getPort());//端口
10     }
11 }

3、通信协议

协议:约定,共同遵守,都能理解

网络通信协议:速率,传输码率,代码结构,传输控制....

3.1 TCP/IP协议簇:实际上是一组协议

重要:

  • TCP:用户传输协议
  • UDP:用户数据报协议

3.2 TCP UDP对比

TCP:打电话

  • 连接,稳定
  • 三次握手,四次挥手
  • 客户端、服务端
  • 传输完成,释放连接,效率低

UDP:发短信

  • 不连接,不稳定
  • 客户端、服务端:没有明确的界限
  • 不管有没有准备好,都可以发给你

3.3 TCP实现聊天

 1 //服务端
 2 public class TcpServerDemo01 {
 3     public static void main(String[] args) {
 4         ServerSocket serverSocket = null;
 5         Socket accept=null;
 6         InputStream is=null;
 7         ByteArrayOutputStream baos=null;
 8         try {
 9             //1.得有一个地址
10             serverSocket = new ServerSocket(9999);
11
12             while (true){
13                 //2.等待客户端连接过来
14                 accept = serverSocket.accept();
15                 //3.读取客户端得消息
16                 is = accept.getInputStream();
17
18                 //管道流
19                 baos = new ByteArrayOutputStream();
20                 byte[] bytes = new byte[1024];
21                 int len;
22                 while ((len=is.read(bytes))!=-1){
23                     baos.write(bytes,0,len);
24                 }
25                 System.out.println(baos.toString());
26             }
27
28         } catch (IOException e) {
29             e.printStackTrace();
30         }finally {
31             //关闭流
32             try {
33                 baos.close();
34             } catch (IOException e) {
35                 e.printStackTrace();
36             }
37             try {
38                 is.close();
39             } catch (IOException e) {
40                 e.printStackTrace();
41             }
42             try {
43                 accept.close();
44             } catch (IOException e) {
45                 e.printStackTrace();
46             }
47             try {
48                 serverSocket.close();
49             } catch (IOException e) {
50                 e.printStackTrace();
51             }
52
53         }
54     }
55 }
 1 //客户端
 2 public class TcpClientDemo01 {
 3     public static void main(String[] args) {
 4         Socket socket=null;
 5         OutputStream os=null;
 6
 7         try {
 8             //1.要直到服务器得地址
 9             InetAddress serverIP= InetAddress.getByName("127.0.0.1");
10             int port=9999;
11             //2.创建一个socker连接
12             try {
13                 socket = new Socket(serverIP,port);
14                 //3.发送消息 IO流
15                 os = socket.getOutputStream();
16                 os.write("Hello".getBytes());
17             } catch (IOException e) {
18                 e.printStackTrace();
19             }
20
21
22         } catch (UnknownHostException e) {
23             e.printStackTrace();
24         }finally {
25             try {
26                 os.close();
27             } catch (IOException e) {
28                 e.printStackTrace();
29             }
30             try {
31                 socket.close();
32             } catch (IOException e) {
33                 e.printStackTrace();
34             }
35         }
36     }
37 }

3.4 TCP文件上传

 1 //服务端
 2 public class TcpServerDemo02 {
 3     public static void main(String[] args) throws Exception{
 4         //1.创建服务
 5         ServerSocket serverSocket = new ServerSocket(9000);
 6         //2.监听客户端得连接
 7         Socket accept = serverSocket.accept();//阻塞式监听,会一直等待客户端得连接
 8         //3.获取输入流
 9         InputStream is = accept.getInputStream();
10
11         //4.文件输出
12         FileOutputStream fos = new FileOutputStream("receive.jpg");
13         byte[] by = new byte[1024];
14         int len;
15         while ((len=is.read(by))!=-1){
16             fos.write(by,0,len);
17         }
18
19         //通知客户端我接收完毕了
20         OutputStream os = accept.getOutputStream();
21         os.write("接收完毕".getBytes());
22
23         os.close();
24         fos.close();
25         is.close();
26         accept.close();
27         serverSocket.close();
28     }
29 }
 1 //客户端
 2 public class TcpClientDemo02 {
 3     public static void main(String[] args) throws Exception{
 4         //1.创建一个socket连接
 5         Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
 6         //2.创建一个输出流
 7         OutputStream os = socket.getOutputStream();
 8
 9         //3.读取文件
10         FileInputStream fis = new FileInputStream("D:\\WorkSpace\\JavaSE\\基础语法\\111.png");
11         //4.写出文件
12         byte[] by = new byte[1024];
13         int len;
14         while ((len=fis.read(by))!=-1){
15             os.write(by,0,len);
16         }
17
18         //通知服务器,我已经传输结束了
19         socket.shutdownOutput();
20
21         //确认服务器接收完毕,才能断开连接
22         InputStream is = socket.getInputStream();
23         ByteArrayOutputStream baos = new ByteArrayOutputStream();
24
25         byte[] bytes = new byte[1024];
26         int leng;
27         while ((leng=is.read(bytes))!=-1){
28             baos.write(bytes,0,leng);
29         }
30         System.out.println(baos.toString());
31
32         baos.close();
33         is.close();
34         os.close();
35         fis.close();
36         socket.close();
37     }
38 }

3.5 UDP消息发送

 1 //发送方
 2 public class UdpClientDemo01 {
 3     public static void main(String[] args) throws Exception{
 4         //1.建立一个Socket
 5         DatagramSocket datagramSocket = new DatagramSocket();
 6
 7         //2.建个包
 8         String msg="你好啊,服务器!";
 9         InetAddress localhost = InetAddress.getByName("localhost");
10         int port = 9090;
11
12         //数据、数据的长度起始、要发给谁
13         DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
14
15         //发送包
16         datagramSocket.send(datagramPacket);
17
18         //4.关闭流
19         datagramSocket.close();
20     }
21 }
 1 //接收方
 2 public class UdpServerDemo01 {
 3     public static void main(String[] args) throws Exception{
 4         //开放端口
 5         DatagramSocket datagramSocket = new DatagramSocket(9090);
 6         //接收数据
 7         byte[] bytes = new byte[1024];
 8         DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
 9
10         datagramSocket.receive(datagramPacket);//阻塞接收
11
12         System.out.println(datagramPacket.getAddress());
13         System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));
14     }
15 }

3.6 UDP聊天实现

 1 //发送方
 2 public class UdpSenderDemo01 {
 3     public static void main(String[] args) throws Exception{
 4
 5         DatagramSocket datagramSocket = new DatagramSocket(8888);
 6
 7         //准备数据:控制台读取System.in
 8         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 9
10         while (true){
11             String data=reader.readLine();
12             byte[] bytes = data.getBytes();
13             DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress("localhost",6666));
14             datagramSocket.send(datagramPacket);
15             if(bytes.equals("byebye")){
16                 break;
17             }
18         }
19         datagramSocket.close();
20     }
21 }
 1 //接收方
 2 public class UdpReceiveDemo01 {
 3     public static void main(String[] args) throws Exception{
 4         DatagramSocket datagramSocket = new DatagramSocket(6666);
 5
 6         while (true){
 7             //准备接收包裹
 8             byte[] bytes = new byte[1024];
 9             DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
10
11             //断开连接 byebye
12             byte[] data = datagramPacket.getData();
13             String string = new String(data, 0, data.length);
14             System.out.println(string);
15             if(string.equals("byebye")){
16                 break;
17             }
18         }
19
20         datagramSocket.close();
21
22     }
23 }

到此这篇关于Java 网络编程总结的文章就介绍到这了,更多相关Java 网络编程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java网络编程UDP协议发送接收数据

    本文实例为大家分享了Java网络编程UDP协议发送接收数据的具体代码,供大家参考,具体内容如下 UDP协议发送数据步骤 A:创建发送端socket对象: B:创建数据,并把数据打包: C:调用socket对象的发送方法发送数据包: D:释放资源 package net; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAd

  • Java网络编程之入门篇

    目录 一.网络基础 二.网络协议 URL类 一.网络基础 二.网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 public class TCPTest1 { //客户端 @Test public void client() { Socket socket = null; OutputStream os = null; try { //1.创建Socket对象,指明服务器端的ip和端口号 InetAddress inet = InetAddress.ge

  • 一篇文章带你入门java网络编程

    目录 基于TCP/IP协议的通信 基于UDP协议的通信 InetAddress 案例演示 (简易聊天室) UDP 演示 总结 基于TCP/IP协议的通信 TCP/IP协议 TCP/IP协议.会在通信两端建立连接(虚拟连接),用于发送和接收数据 TCP/IP协议是一种可靠的网络协议,它通过重发机制来保证这种可靠性 通信的实现 ServerSocket用来监听来自客户端的连接,当没有连接时,它处于阻塞状态 客户端使用Socket连接到指定的服务器 基于UDP协议的通信 UDP协议 UDP协议不会在通

  • Java网络编程之UDP实现原理解析

    UDP实现通信非常简单,没有服务器,每个都是客户端,每个客户端都需要一个发送端口和一个接收端口.一个客户端向另一个客户端发送消息时,需要知道对方的IP和接收端口,所用到的类为DatagramSocket. DatagramSocket socket =new DatagramSocket(),发送端socket,若不指定端口,系统自动分配 DatagramSocket socket =new DatagramSocket("接收信息端口"),接收端socket,需要指定接收端口 ​ 若

  • Java网络编程之IO模型阻塞与非阻塞简要分析

    目录 1.阻塞I/O模型 2.非阻塞I/O模型 1.阻塞I/O模型 阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞.阻塞IO模型的工作流程为: 1.1在用户线程发出IO请求之后,内核会检查数据是否就绪,此时用户线程一直阻塞等待内存数据就绪: 1.2在内存数据就绪后,内核将数据复制到用户线程中,并返回I/O执行结果到用户线程,此时用户线程将解除阻塞状态并开始处理数据. 典型的阻塞I/O模型的例子为data= socket.read(),如果内核数据没有就绪, Socket线程就会一直阻

  • Java网络编程基础详解

    目录 网络编程 1.1 概述 1.2.网络通信的要素 1.网络编程中有两个主要的问题 2.网络编程中的三要素 1.3.IP 1.4.端口 1.5.通信协议 UDP协议 TCP协议 1.6.TCP模拟通信 客户端 服务器 文件上传 1.7.UDP 1.8.URL 实例: 总结 网络编程 1.1 概述 1.2.网络通信的要素 如何实现网络通信? 1.网络编程中有两个主要的问题 如何定位到网络上的一台或者多台主机 使用cmd-->ping命令,ping一个域名,可以看到访问的主机的IP地址 [外链图片

  • Java小白第一次就能看懂的网络编程

    目录 一.网络基础 二.网络协议 URL类 一.网络基础 二.网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 public class TCPTest1 { //客户端 @Test public void client() { Socket socket = null; OutputStream os = null; try { //1.创建Socket对象,指明服务器端的ip和端口号 InetAddress inet = InetAddress.ge

  • Java 全面掌握网络编程篇

    目录 计算机网络 网络模型 客户机服务器模式(Client/Server) TCP/IP的概念和实现 TCP三次握手(Three-way handshake) TCP编程 UDP的概念和实现 UDP编程 TCP和UDP的区别 聊天室 服务器处理线程 客户端处理线程 服务器 客户端 效果 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.包括局域网(intrane

  • 老生常谈Java网络编程TCP通信(必看篇)

    Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务.Socket和ServerSocket类位于java.net包中.ServerSocket用于服务端,Socket是建立网络连接时使用的.连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话. Socket常用方法: -int getLocalP

  • Java网络编程之简单的服务端客户端应用实例

    本文实例讲述了Java网络编程之简单的服务端客户端应用.分享给大家供大家参考.具体如下: 在Java中,我们使用java.net.Socket及其相关类来完成有关网络的相关功能.Socket类非常简单易用,因为Java技术隐藏了建立网络连接和通过连接发送数据的复杂过程.下面所说的内容只适用于TCP协议. 一.连接到服务器 我们可以使用Socket类的构造函数来打开一个套接字,如 Socket sk = new Socket("210.0.235.14",13); 其中,210.0.23

  • java网络编程基础知识介绍

    网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层 ------------ IP(网络之间的互联协议) 传输层 ------------ TCP(传输控制协议).UDP(用户数据报协议) 应用层 ------------ Telnet(Internet远程登录服务的标准协议和主要方式).FTP(文本传输协议).HTTP(超文本传送协议) 3.IP地址和端口号 1.ip地址用于

  • Java网络编程实现的简单端口扫描器示例

    本文实例讲述了Java网络编程实现的简单端口扫描器.分享给大家供大家参考,具体如下: 在计算机网络的学习中,不由得觉得这门课的零碎知识点异常之多,同时因为学习的课本是老外的教材--自顶向下方法,因此学习起来不免觉得吃力,但是从老外的教材里更能从一定高度理解计算机网络的知识体系,也是乐在其中,同时做英语的习题感觉也很有趣味,从各方面来说可以说是获益良多,认识了很多专业词汇.节课之后,便想做一个简单的端口扫描器,用的语言是java,因为实现界面很简单,同时也有封装好的Socket类可以使用,主要思路

  • 基于Java网络编程和多线程的多对多聊天系统

    1.前言 程序实现基于星型结构(服务器接收来自各个客户端发送的信息,然后将信息传递给其他客户端界面并在其他客户端界面显示发送的信息) 2.类图 3.代码 客户端代码: package netProgram; import java.io.IOException; import java.net.Socket; import java.net.SocketAddress; public class Client implements ScreenInputInterface{ private So

  • Java网络编程之基于TCP协议

    一.单向通信 功能:客户端发送一句话到服务器: 客户端: public class TestClient {//客户端 //这是一个main方法,是程序的入口: public static void main(String[] args) throws IOException { //1.创建套接字:指定服务器的ip和端口号: Socket s = new Socket("192.168.199.217",8888); //2.对于程序员来说,向外发送数据 感受 -->利用输出流

  • Java网络编程实例——简单模拟在线聊天

    1.前提知识 需要知道简单的IO流操作,以及简单的UDP发送数据包的原理. 需要用到的类:DatagramSocket.DatagramPacket UDP数据包基于DatagramSocket发送和接收,DatagramPacket用于封装数据包 看下案例: 客户端发送消息: 正常情况下从控制台读信息,封装到DatagramPacket之中,再由DatagramSocket的send方法发出 读取到bye的时候退出聊天 public class UdpOnlineClient { public

  • 详解Java网络编程

    一.网络编程 1.1.概述 1.计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输.Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程. 2.Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序. 3.Java提供的网络类库,可以实现无痛的网络连接,联

  • Java网络编程TCP实现文件上传功能

    本文实例为大家分享了Java网络编程TCP实现文件上传的具体代码,供大家参考,具体内容如下 上一篇博客,用网络编程TCP 实现聊天,这次实现文件上传. 客户端: package com.kuang.lesson02; import java.io.*; import java.net.InetAddress; import java.net.Socket; //客户端 public class TcpClientDemo2 { public static void main(String[] a

  • Java网络编程实现多线程聊天

    本文实例为大家分享了Java网络编程实现多线程聊天的具体代码,供大家参考,具体内容如下 聊天程序如果是单线程,会导致没人只能说一句,并且说了以后,必须等到另一个人的回复,才能说第二句.收发都在主线程中,不能同时进行. 解决方法: 将收发放到两个不同的线程 1. SendThread 发送消息线程 2. RecieveThread 接受消息线程 3. Server一旦接受到连接,就启动收发两个线程 4. Client 一旦建立了连接,就启动收发两个线程 多线程聊天 1 SendThread pac

随机推荐