java 网络编程学习笔记
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 网络编程学习笔记的更多相关文章
- Java网络编程学习笔记
Java网络编程,我们先来看下面这一张图: 由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听.通过accept来判断是否有客户端与其相连.若成功连上,则通过r ...
- java网络编程学习笔记(一)
1.进程之间的通信 进程是指运行中的程序,进程的任务就是执行程序中的代码. 存在计算机网络上的两个进程只需要关注它们通信的具体内容,而不需关注消息在网络上传输的具体细节. 2.计算机网络的概念 Int ...
- java网络编程学习笔记(四):线程池的实现
package QQ; import java.util.LinkedList; /** * Created by hu on 2015/11/9. */ public class ThreadPoo ...
- java网络编程学习笔记(二):socket详解
1.Socket有多种构造方法,大多数构造方法在构造的时候就指定了连接的主机和端口号.当客户端的构造方法与服务器连接的时候,可能需要等待一段时间,因为需要建立连接.默认情况下,Socket的构造方法会 ...
- java网络编程学习笔记(三):ServerSocket详解
1.ServerSocket的构造方法 ServerSocket(); ServerSocket(int port); ServerSocket(int port,int backlog); Serv ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- 转 网络编程学习笔记一:Socket编程
题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...
- JAVA TCP网络编程学习笔记
一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
随机推荐
- Gmail,QMail,163邮箱的 IMAP/SMTP/POP3 地址
我们在客户端设置邮箱或者使用 PHPMailer 发送邮件的时候,我们都会去查找这些邮箱的 IMAP/SMTP/POP3 地址,这里就列出 Gmail, QMail, 163邮箱这三个常用邮箱的这些地 ...
- mysql timeout
(待更新整理) 因为最近遇到一些超时的问题,正好就把所有的timeout参数都理一遍,首先数据库里查一下看有哪些超时: root@localhost : test 12:55:50> show ...
- 使用flex
Flex如何处理二义性模式: 1.词法分析器匹配输入时匹配尽可能多的字符串 2.如果两个模式都可以匹配的话,匹配在程序中更早出现的模式 上下文相关的记号 flex提供起始状态(start state) ...
- crontab中使用python无法执行
手动执行可以的,但是在crontab中却无法执行,在网上搜了一圈,给出的结论是将相对路径改成绝对路径. 改了之后解决这个问题. 是不是依赖某些环境变量,linux 里的 cron 只有几个基本的环境变 ...
- 你好 JSONP !!!!
跨域与JSONP ==JSONP是解决跨域问题的一种常见方式== ==跨域问题==:因为浏览器有同源策略,所以当不同域间进行数据交互的时候就会出现跨域问题 ···· 同源策略:只有在同协议,同域名,同 ...
- [最短路]P1339 [USACO09OCT]热浪Heat Wave
题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...
- MyBatis物理分页的代码实现
一.分页 MyBatis有两种分页方法:内存分页,也就是假分页,本质是查出所有的数据然后根据游标的方式,截取需要的记录,如果数据量大,执行效率低,可能造成内存溢出.物理分页,就是数据库本身提供了分页方 ...
- 【转】Visual Studio Code 使用Git进行版本控制
原文链接:https://www.cnblogs.com/xuanhun/p/6019038.html?utm_source=tuicool&utm_medium=referral 本来认为此 ...
- UVA 1508 - Equipment dp状态压缩
题意: 已知n个5元组,从中选出k组,使得这些组中5个位置,每个位置上最大数之和最大. 分析:当k>5时,就是n个5元组最大的数之和,当k<5时,就当做5元组,状态压缩,用00000表示 ...
- Python中的选择排序
选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大 ...