UDP协议和TCP协议

  1. UDP协议和TCP协议都是传输层的协议,都是端到端协议
  2. 区别:

UDP协议面向无连接,像发短信,寄信,先发送的消息未必先到达,不安全,效率高,只区分发送端和接收端,而不区分客户端和服务端

TCP协议面向连接,像打电话,先发送的消息一定是先到,安全,效率低,区分客户端和服务端。在连接的时候,会有三次握手的动作。

UDP:

DatagramPacket类表示存放数据的数据包
DatagramSocket类表示一个数据报套接字,包含了源IP地址,和目的IP地址以及源端口号和目的端口号的组合,用于
发送和接受UDP数据。

演示:

TestSend

package network;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;public class TestSend {public static void main(String[] args) throws Exception {//创建DatagramSocket对象,指定端口号为8090DatagramSocket ds = new DatagramSocket(8090);//要发送的数据byte[] bs = "I am UDP!!!".getBytes();//指定接收端IP为127.0.0.1,端口号为8081DatagramPacket dp = new DatagramPacket(bs,0,bs.length, InetAddress.getByName("127.0.0.1"),8081);System.out.println("Sending data...");ds.send(dp);//发送数据ds.close();}
}

TestReceive:

package network;import java.net.DatagramPacket;
import java.net.DatagramSocket;/*
DatagramPacket类表示存放数据的数据包
DatagramSocket类表示一个数据报套接字,包含了源IP地址,和目的IP地址以及源端口号和目的端口号的组合,用于
发送和接受UDP数据。*/
public class TestReceivce {public static void main(String[] args) throws Exception {//创建DatagramSocket对象,指定端口号8081  创建数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket ds = new DatagramSocket(8081);byte[] bs = new byte[1024];//创建接受数据的数组//创建DatagramPacket对象,用于接收数据DatagramPacket dp = new DatagramPacket(bs,bs.length);System.out.println("Waiting to receive data...");//receive(dp) 从此套接字接收数据报包    没有数据会阻塞ds.receive(dp);//获取接受数据的内容和长度String str = new String(dp.getData(),0,dp.getLength());//打印接收到的信息System.out.println(str + "-->" + dp.getAddress().getHostAddress() + ":" + dp.getPort());ds.close();}
}

TCP编程

  1. 使用的通信点就是Socket类型
  2. 客户端和服务端获取Socket对象的区别:

1、客户端使用Socket的构造方法,创建一个Socket对象

2、服务端不能使用自己创建的方式,而是使用服务端一个特殊的对象,接收客户端发来的请求,生成一个为这个客户端服务的Socket对象

3、构造方法:

Socket(String host, int port)

Socket(InetAddress ip, int port):建立一个通信点,专门用于和ip主机的port程序进行通信。

只要这个对象创建成功了,就说明这个连接已经建立起来了,就说明当前的客户端已经联系上服务端了,已经获取了服务端返回的响应。

在创建对象的过程,就是在请求和服务端连接的过程。

4、服务端获取Socket对象的方式:

1、启动一个服务程序,类型是ServerSocket,可以接收客户端发来的连接请求,一旦接收到请求,就可以创建一个和当前客户端交互的Socket对象

2、ServerSocket的构造方法

ServerSocket(int port):创建一个服务端Socket对象,等待访问port端口的客户端

3、accept():接收一个客户端发来的请求,返回一个服务此客户端的Socket对象

5、获取客户端和服务端的连接

1、两个方法:

InputStream  getInputStream():获取Socket对象的网络输入流

OutputStream  getOutputStream():获取Socket对象的网络输出流

2、一旦获取了输入输出流,就可以通过I\O的方式,来操作网络数据的传输。

3、对应关系:

客户端的网络输入流,对应服务端的网络输出流

客户端的网络输出流,对应服务端的网络输入流

6、TCP编程步骤

客户端:

1、创建Socket对象,建立和服务端的连接

2、获取网络输入流和网络输出流

3、通过I\O的操作来进行数据传输

服务端:

1、创建ServerSocket对象,开启服务器,监听指定端口

2、调用accept方法,接收客户端发来的请求,返回一个Socket对象

3、获取服务端的网络输入流和网络输出流

4、通过I\O的操作来进行输出传输

TestServer:
package network;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(9090);System.out.println("waiting accept data...");Socket s = ss.accept();//侦听并接受到此套接字的连接。InputStream is = s.getInputStream();//返回此套接字的输入流byte[] bs = new byte[20];int len;while ((len = is.read(bs)) != -1){String str = new String(bs,0,len);System.out.println(str);}OutputStream os = s.getOutputStream();//返回此套接字的输出流os.write("server already accept data".getBytes());os.close();is.close();s.close();ss.close();}
}
TestSend:
package network;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;public class TestSend {public static void main(String[] args) throws Exception {//创建DatagramSocket对象,指定端口号为8090DatagramSocket ds = new DatagramSocket(8090);//要发送的数据byte[] bs = "I am UDP!!!".getBytes();//指定接收端IP为127.0.0.1,端口号为8081DatagramPacket dp = new DatagramPacket(bs,0,bs.length, InetAddress.getByName("127.0.0.1"),8081);System.out.println("Sending data...");ds.send(dp);//发送数据ds.close();}
}

java基础--网络编程相关推荐

  1. JAVA基础 网络编程

    JAVA基础 网络编程 网络我们每天都会用到的,在我们生活中占的地位也在不断的提高,我们下面就简单了解下网络编程的内容. 想要学习网络编程,首先就需要了解网络编程包含哪些内容. 网络编程包括 IP节点 ...

  2. 学习笔记-java基础-网络编程

    刚在培训机构学习完JAVA基础和WEB,感觉边学边忘.就把这作为记忆的笔记,我也不知道要不要记笔记,写在本子上太耗费时间了. 一.要想实现网络通信,首先要解决两个问题: ①:如何从网络中定位到一台或多 ...

  3. 黑马程序员——java基础---网络编程

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  4. java基础-网络编程

    1.网络模型: OSI参考模型.TCP/IP参考模型 数据传输的过程:向下走:封包    向上走:拆包 向上走一直拆包,直到得到数据. 2.网络通讯要素 ip地址.端口号.传输协议 Ip和端口用来找对 ...

  5. java基础网络编程

    利用网络,实现两台计算机之间的互相联通.交互. 网络编程有两类: UDP 一种无连接的传输层协议.无连接:指不需要知道对方在不在,只负责发数据传输出去,而对方可能不在,数据便会丢失,所以是不稳定的. ...

  6. 黑马程序员——Java基础——网络编程1

    ------- android培训.java培训.期待与您交流! ---------- 网络编程1 一.获取IP     网络编程主要在传输层 :TCP(Transmission Control Pr ...

  7. Java基础(网络编程基础)

    1.软件结构 C/S:客户端和服务器(QQ.微信) B/S:浏览器和服务器(火狐.IE.谷歌) 2.网络通信协议 网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行 ...

  8. Java基础——网络编程

    一.网路编程知识 意义:过去我们IO流是把本地的文件传递而已,网络编程是把自己电脑的数据传递给另一台电脑,并且回馈信息.这是数据通讯 1.通讯三要素 1.1 IP地址 (1)获取对方主机IP 1.2 ...

  9. IT十八掌Java基础 网络编程

    网络编程 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网 ...

  10. java基础----网络编程

    网络编程 1.什么是网络?网络模型?网络四要素? 网络: 在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 网络模型: 计算机网络是指由 ...

最新文章

  1. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
  2. Sql Server通用分页存储过程
  3. c语言接受socket发送尾部有乱码,C语言socket编程,服务器和一个客户端连接时,服务器能正常收到信息,2个以上就出现BUG了...
  4. Java中截取文件名不要后缀
  5. 谷歌能否赶上「元宇宙」这趟快车?
  6. 计算机在管理会计应用中的作用,信息化在管理会计中的作用
  7. sublime设置自己的快捷键
  8. dubbo 自定义过滤器
  9. 批量运行C文件之makefile
  10. 例子:10秒后同意按钮可点击
  11. ascll编码表图片_ASCII编码表
  12. UIAlertController中TextField的用法
  13. go和python互调
  14. PCIE5.0英文版协议
  15. Windows文件系统
  16. ubuntu nvidia 驱动卸载
  17. mysql 按照姓氏排序
  18. CSGO服务器搭建教程
  19. 计算机 host id是指,关于如何修改hostid的问题Windows系统 -电脑资料
  20. 小功能⭐️Unity动态更改 Scripting Define Symbols (宏定义)

热门文章

  1. HDU - 5573 Binary Tree(思维+构造+二进制)
  2. HDU - 6194 string string string(后缀数组+RMQ+容斥)
  3. POJ - 2186 Popular Cows(强连通缩点)
  4. HDU - 2255 奔小康赚大钱(二分图最大权匹配+KM)
  5. PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)
  6. HDU - 1255 覆盖的面积(线段树+扫描线)
  7. 机器学习-关联之Apriori算法原理及实战
  8. java自学方法_JAVA自学 方法
  9. 动态开点线段树(多棵线段树)的内存分配与回收
  10. 【Boost】boost库asio详解6——boost::asio::error的用法浅析