个人理解:

  了解区分UDP与TCP的不同,正常情况都是两者结合的使用模式!为了更好的传输,经常会开多线程进行传输的!

一、网络通信协议:

1、TCP/IP协议:

四层:应用层、传输层、网络层和链路层:

链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。

网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。

传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。

应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。

2、IP地址和端口号:

①、IP地址,它可以唯一标识一台计算机:

  以前为IPV4,现在是IPV6的16个字节表示地址。

②、端口号:两个字节:0-65535。一般为1024以上的端口号。

3、InetAddress类:

import java.net.InetAddress;
import java.net.UnknownHostException; public class Demo01 {
public static void main(String[] args) throws UnknownHostException {
InetAddress inet=InetAddress.getByName("192.168.1.163");//里面是自己的ip地址
//从对象中获取IP地址
System.out.println(inet.getHostAddress());
//获取主机名
System.out.println(inet.getHostName());
//获取本地主机ip对象
InetAddress inet2=InetAddress.getLocalHost();
System.out.println(inet2.getHostAddress());
System.out.println(inet2.getHostName());
}
}

二、UDP与TCP协议:

1、UDP协议:

  User Datagram Protocol 用户数据报协议--无连接的通信协议:不能保证数据的完整性,随缘!!!64K以内。

2、TCP协议:

  Transmission Control Protocol  传输控制协议---面向连接的通信协议:

在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据。

  在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认,第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求,第三次握手,客户端再次向服务器端发送确认信息,确认连接。

三、UDP通讯:

1、DatagramPacket:数据打包类:

用于封装UDP通信中发送或者接收的数据。

2、DatagramSocket:“码头”:可以发送和接收DatagramPacket数据包

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; //发送端
public class UDPSend {
public static void main(String[] args) throws IOException {
//封装数据
byte[ ] bytes="你好UDP".getBytes();
//封装ip地址
InetAddress inet=InetAddress.getByName("127.0.0.1");
//1。创建数据打包对象,封装要发送的数据、长度、接收端的IP地址和端口号
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,6000);
//2.创建DatagreamSocket对象(快递公司)
DatagramSocket ds=new DatagramSocket();
//3.发送数据包
ds.send(dp);
//释放资源
ds.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; //接收端
public class UDPReceive {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象,明确端口号
DatagramSocket ds=new DatagramSocket(6000);
//2.创建字节数组负责接收发来的数据
byte [] bytes=new byte[1024];
//3.创建数据拆包对象
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//4.接收数据包
ds.receive(dp);
//5.拆包
//获取接收的数据长度
int length=dp.getLength();
//获取发送端的IP地址
String ip=dp.getAddress().getHostAddress();
//获取发送端的端口号
int port =dp.getPort();
System.out.println("ip地址为:"+ip+"端口号为:"+port+"发送的内容为:"+new String(bytes,0,length));
}
}

四、TCP通信:

1、ServerSocket类:服务器端;Socket类:客户端。

//服务器端
public class TCPServer {
public static void main(String[] args) throws IOException {
//1.创建服务器对象ServerSocket,明确端口号
ServerSocket server=new ServerSocket(8888);
//2.调用accept方法,跟客户端创建连接,并获取连接的客户端对象
Socket socket=server.accept();
//3.明确目的地
File file=new File("D:\\nihao");
//如果该目录不存在则创建
if(!file.exists()){
file.mkdirs();
}
String filename="oracle"+System.currentTimeMillis()+".txt";
//明确目的地
FileOutputStream fos=new FileOutputStream(file+File.separator+filename);
//明确数据源
InputStream in=socket.getInputStream();
//开始复制
int len=0;
byte[] bytes=new byte[1024];
while((len=in.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//回复客户端
//获取字节输出流 ,回复客户端
OutputStream out =socket.getOutputStream();
out.write("上传成功".getBytes()); //释放资源
fos.close();
server.close(); }
}
//客户端
public class TCPClient {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建Socket对象,明确要连接的服务器地址和端口号
Socket socket =new Socket("127.0.0.1",8888);
//2.明确数据源
FileInputStream fis=new FileInputStream("D:\\java\\a.txt");
//3.从socke对象中获取字节输出流,准备把读的文件字节写给服务器
OutputStream out=socket.getOutputStream();
//4.开始复制
int len=0;
byte[] bytes=new byte[1024];
while((len=fis.read(bytes))!=-1){
out.write(bytes,0,len);
}
//结束输出流,告诉服务器结束了,不要读了
socket.shutdownOutput();
//接收服务器的回复
//1.从socket对象中获取字节输入流,接收服务器回复的数据
InputStream in=socket.getInputStream();
len=in.read(bytes);
System.out.println(new String(bytes,0,len));
//释放资源
socket.close();
fis.close();
}
}

2、多线程传输:

//线程任务对象
public class Upload implements Runnable {
private Socket socket; public Upload() {
}; public Upload(Socket socket) {
this.socket = socket;
}; public void run() {
FileOutputStream fos = null;
try {
// 3.明确目的地
File file = new File("D:\\nihao");
// 如果该目录不存在则创建
if (!file.exists()) {
file.mkdirs();
}
String filename = "oracle" + System.currentTimeMillis() + ".txt";
// 明确目的地
fos = new FileOutputStream(file + File.separator + filename);
// 明确数据源
InputStream in = socket.getInputStream();
// 开始复制
int len = 0;
byte[] bytes = new byte[1024];
while ((len = in.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
// 回复客户端
// 获取字节输出流 ,回复客户端
OutputStream out = socket.getOutputStream();
out.write("上传成功".getBytes());
} catch (IOException ex) {
ex.printStackTrace();
} finally {
// 释放资源
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}
public class Demo {

    public static void main(String[] args) throws IOException {
//1.创建服务器对象
ServerSocket server=new ServerSocket(8888);
while(true){
//创建连接获取客户端对象
Socket socket=server.accept();
/*//创建线程(创建线程任务)
new Thread(new Upload(socket)).start();*/
//创建线程任务
Upload up=new Upload(socket);
//创建线程对象
Thread thread=new Thread(up);
//开启线程
thread.start(); } } }

JAVA基础之网络通信协议--TCP与UDP的更多相关文章

  1. java基础(31):网络通信协议、UDP、TCP

    1. 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通 ...

  2. Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天

    网络编程 网络模型 *OSI参考模型 *Tcp/IP参考模型 网络通读要素 *IP地址 *端口号 *传输协议 1.找到对方Ip 2.数据要发送到对方指定的的应用程序上,为了标识这些应用程序,所经给这些 ...

  3. java基础篇---网络编程(TCP程序设计)

    TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...

  4. java基础:网络编程TCP,URL

    获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostExc ...

  5. 网络通信协议tcp,udp区别

    1 网络通信协议 Tcp udp的区别 重点(*****) Tcp三次握手四次挥手(******) udp客户端多人聊天 import socket udp_client = socket.socke ...

  6. 黑马程序员:Java基础总结----网络编程

    黑马程序员:Java基础总结 网络编程   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...

  7. Socket网络编程TCP、UDP演示样例

    Socket网络编程: 1) OSI(了解): 国际标准化组织ISO(International Orgnization for Standardization)指定了网络通信的模型:开放系统互联(O ...

  8. 【基础网络】TCP与UDP 的区别

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  9. day27 网络通信协议 tcp/udp区别

    今日主要内容: 一.网络通信协议 二.tcp udp协议下的socket 一.网络通信协议 1.1互联网的本质就是一系列的网络协议 本机IP地址('127.0.0.1',xxxx) 互联网连接的电脑互 ...

随机推荐

  1. MySql 官方存储引擎

    存储引擎是为不同的表类型处理 SQL 操作的 MySql 组件.InnoDB 是默认的.最通用的存储引擎,也是官方推荐使用的存储引擎,除非一些特定案例.MySql 5.6 中的 CREATE TABL ...

  2. 51Nod 1362 搬箱子 —— 组合数(非质数取模) (差分TLE)

    题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1362 首先,\( f[i][j] \) 是一个 \( i \) 次多项式: 如 ...

  3. BZOJ2467五角形生成树——数学

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2467 可以得出只需在每个五角形中去掉任意一条边,在某个五角形中去掉包括内边的两条边即可. 代码 ...

  4. fabric添加多主机ssh互信

    最近折腾fabric,把服务器ssh互信用fabric写了一遍,单向互信,master可以无密码访问client,具体如下: 执行:fab  -f ./copyrsa.py allsshkey 即可, ...

  5. 使用unlist将日期型数据的列表转换为向量时,出现的异常

    在使用unlist函数,将日期型的列表,转换为向量时,不会得到期望的结果,如下: > dateLst <- list(Sys.Date()) > dateLst [[1]] [1] ...

  6. android apk 防止反编译技术第二篇-运行时修改字节码

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

  7. python :字符串,列表,元组,集合,字典

    字符串方法: 字符串是一个有序的,不可修改的,元素是以引号包围的序列.单引号,双引号,三引号,str生成 字符串的修饰   a='novo gene' a.center() 让字符串在指定的长度居中显 ...

  8. uva 12452 Plants vs. Zombies HD SP (树DP)

    Problem I: Plants vs. Zombies HD Super Pro Plants versus Zombies HD Super Pro is a game played not a ...

  9. ASP.NET中 TextBox 文本输入框控件的使用方法

    TextBox控件又称文本框控件,为用户提供输入文本的功能. 1.属性 TextBox控件的常用属性及说明如表1所示. 表1 TextBox控件常用属性及说明 属性 说明 AutoPostBack 获 ...

  10. 详解select()函数---

    以后看 http://hi.baidu.com/bimufo/item/139700e4d880cba1c00d755c