1.IP地址

IP地址组成:网络号段+主机号段

IP地址分类:

A类:第一号段为网络号段+后三段的主机号段

1.0.0.1---127.255.255.254(10.x.x.x是私有地址)

一个网络号可分配256*256*256个IP

B类:前二号段为网络号段+后二段的主机号段

128.0.0.1---191.255.255.254(172.16.0.0---172.31.255.255是私有地址)

一个网络号可分配256*256个IP

C类:前三号段为网络号段+后一段的主机号段(常用)

192.0.0.1---223.255.255.254(192.168.x.x是私有地址)

一个网络号可分配256个IP

D类:保留地址

224.0.0.1---239.255.255.254

E类:保留地址

240.0.0.1---247.255.255.254

特殊IP地址:

127.0.0.1:回环地址,表示本机

x.x.x.255:广播地址

x.x.x.0:网络地址

 2.端口(逻辑端口)

每个网络程序都至少有一个逻辑端口

用于标识进程的逻辑地址,不同进程的标识

有效端口:0--65535,其中0--1024为系统使用或保留端口

3.协议

UPD:把数据打包,数据有限制,不建立连接,速度快,不可靠

TCP:建立连接通道,数据无限制,速度慢,可靠

4.Socket:网络套接字,包含了IP地址+端口号

通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输

5.UDP协议发送接收数据

public class SendDemo {
public static void main(String[] args) throws Exception {
//1.创建UDP协议发送端Socket对象
DatagramSocket ds = new DatagramSocket(); //2.创建数据,并把数据打包
byte[] bytes = "Hello World".getBytes();//创建要发送的数据
int length = bytes.length;
//创建要发送的Ip地址对象
InetAddress address = InetAddress.getByName("127.0.0.1");
//设置端口(1024以上)
int port = 10110;
//public DatagramPacket(byte buf[], int length,InetAddress address, int port)
DatagramPacket dp = new DatagramPacket(bytes, length, address, port); //3.调用Socket对象的发送方法发送数据包,public void send(DatagramPacket p)
ds.send(dp); //4.释放资源
ds.close();
}
}
public class ReceiveDemo {
public static void main(String[] args) throws Exception {
//1.创建UDP协议接收端Socket对象,端口号与发送端一致
DatagramSocket ds = new DatagramSocket(10110); //2.创建一个数据包(接收容器)
byte[] bytes = new byte[1024];
int length = bytes.length;
DatagramPacket dp = new DatagramPacket(bytes, length); //3.调用Socket对象的接收方法接收数据包
ds.receive(dp); //4.解析数据包
String ip = dp.getAddress().getHostAddress();//获取发送端的IP
byte[] bytes1 = dp.getData();//获取数据缓冲区
int length1 = dp.getLength();//获取数据实际长度
String str = new String(bytes1, 0, length1);
System.out.println(ip + ":" + str);//接收到的数据显示在控制台 //5.释放资源
ds.close();
}
}

6.TCP协议发送接收数据

public class ClientDemo {
public static void main(String[] args) throws IOException { //1.创建发送端的Socket对象,设置访问的IP和端口
Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8888); //2.获取通道内的输出流,写数据
OutputStream os = s.getOutputStream();
os.write("Hello World".getBytes());
s.shutdownOutput();//写数据完成,服务端不用在等待 //3.获取输入流,读取返回结果
InputStream is = s.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String str = new String(bytes, 0, len);
System.out.println("返回结果:" + str); //4.释放资源
s.close();
}
}
public class ServerDemo {
public static void main(String[] args) throws IOException { //1.创建接收端的Socket对象
ServerSocket ss = new ServerSocket(8888); while (true) {
//2.监听客户端连接,返回一个对应的Socket对象
Socket s = ss.accept(); new Thread(new ClientThread(s)).start();
}
}
}
public class ClientThread implements Runnable {

    private Socket s;

    public ClientThread(Socket s) {
this.s = s;
} @Override
public void run() { try {
//3.获取输入流,读取数据显示在控制台
InputStream is = null;
is = s.getInputStream();
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String str = new String(bytes, 0, len);
String ip = s.getInetAddress().getHostAddress();//获取客户端IP地址
System.out.println(ip + ":" + str); //4.获取输出流,写入返回结果
OutputStream os = s.getOutputStream();
os.write("数据已收到".getBytes());
//5.释放资源
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

java 网络编程学习笔记的更多相关文章

  1. Java网络编程学习笔记

    Java网络编程,我们先来看下面这一张图: 由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听.通过accept来判断是否有客户端与其相连.若成功连上,则通过r ...

  2. java网络编程学习笔记(一)

    1.进程之间的通信 进程是指运行中的程序,进程的任务就是执行程序中的代码. 存在计算机网络上的两个进程只需要关注它们通信的具体内容,而不需关注消息在网络上传输的具体细节. 2.计算机网络的概念 Int ...

  3. java网络编程学习笔记(四):线程池的实现

    package QQ; import java.util.LinkedList; /** * Created by hu on 2015/11/9. */ public class ThreadPoo ...

  4. java网络编程学习笔记(二):socket详解

    1.Socket有多种构造方法,大多数构造方法在构造的时候就指定了连接的主机和端口号.当客户端的构造方法与服务器连接的时候,可能需要等待一段时间,因为需要建立连接.默认情况下,Socket的构造方法会 ...

  5. java网络编程学习笔记(三):ServerSocket详解

    1.ServerSocket的构造方法 ServerSocket(); ServerSocket(int port); ServerSocket(int port,int backlog); Serv ...

  6. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  7. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  8. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

  9. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

随机推荐

  1. JS获取DOM元素

    1.childNodes:获取节点,不同浏览器表现不同: IE:只获取元素节点: 非IE:获取元素节点与文本节点: 解决方案:if(childNode.nodeName=="#text&qu ...

  2. python基础-------函数(一)

    一 为何要有函数?不加区分地将所有功能的代码垒到一起, 问题是: 代码可读性差 代码冗余 代码可扩展差 如何解决?函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用 结论:函数使用必须 ...

  3. python基础(二)-------数据类型

    python开发基础篇(二)数据类型 python数据类型有: 1.数字 1.只能存放一个值 2.一经定义,不可更改 3.直接访问 主要的分类为:整型,长整型,(python2有长整型的概念Pytho ...

  4. 微信小程序开发《三》:微信小程序请求不能使用session的原因及解决办法

    本人在前面的微信小程序开发<二>中提到要想在服务端保持状态需要在客户端第一次请求服务器的时候给客户端返回一个sessionid,由客户端在本地保存,下次请求的时候在header里面带上这个 ...

  5. Web登录敲门砖之sql注入

    声明:文本原创,转载请说明出处,若因本文而产生任何违法违纪行为将与本人无关.在百度.博客园.oschina.github .SegmentFault.上面都关于sql注入的文章和工具.看过很多sql注 ...

  6. 搭建php环境的几种方法

    对于想学习php开发初学者来说,先要学习搭建php开发环境,因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境, ...

  7. centos7下部署Django(nginx+uwsgi+python3+django)

    系统版本 centos7 python版本 使用官方python3.6.3正式版 django版本 使用本文发布时最新的1.11.7 uwsgi版本 使用本文发布时最新的2.0.15 nginx版本 ...

  8. JavaScript中typeof,instanceof,hasOwnProperty,in的用法和区别

    一. typeof操作符 typeof操作符用于返回正在使用值的类型. // 使用原始值 let mNull = null; let mUndefined = undefined; let mStri ...

  9. 随笔-SQL的三种存储引擎即三种类型的表

    MYSQL 的环境变量:......server/bin下 引擎(Engine):是电子平台上开发程序或系统的核心组件.利用引擎,开发者可迅速建立.铺设程序所需的功能,或利用其辅助程序的运转.一般而言 ...

  10. 从a标签传值中文乱码解决

    <% out.print(new String(request.getParameter("a标签的参数").getBytes("iso8859-1"), ...