【Java学习笔记】23.网络编程--Socket
来源:互联网 发布:淘宝有百度云盘吗 编辑:程序博客网 时间:2024/06/12 23:31
一.Java网络编程
网络编程又称为Socket编程,或者套接字。
Socket包括:
1)ip:一个计算的标示(找到这个计算机)
2)端口号:应用程序都会对应一个端口,用来进行通信,有效端口:0~65535,其中0~1024系统使用或保留端口
3)协议:有2种协议(TCP,UDP)
- **TCP:**TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP
- **UDP:**UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。
两种协议的区别?
UDP:
把数据打成一个数据包 , 不需要建立连接
数据包的大小有限制不能超过64k
因为无连接,所以属于不可靠协议(可能丢失数据)
因为无连接 ,所以效率高
TCP:
需要建立连接,形成连接通道
数据可以使用连接通道直接进行传输,无大小限制
因为有链接,所以属于可靠协议
因为有链接,所以效率低
二.InetAddress–地址描述类
import java.net.InetAddress;import java.net.UnknownHostException;/* * InetAddress:IP地址的描述类 * A:InetAddress类的概述 为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用 此类表示互联网协议 (IP) 地址。 B:InetAddress类的常见功能 public static InetAddress getByName(String host)( host: 可以是主机名,也可以是IP地址的字符串表现形式) public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。 public String getHostName()获取此 IP 地址的主机名。 C:案例演示: InetAddress类的常见功能 */public class InetAddressDemo { public static void main(String[] args) throws Exception { //通过主机ip获取InetAddress对象 //127.0.0.1是本地回环地址,指向本机地址 InetAddress address = InetAddress.getByName("127.0.0.1"); //public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。 System.out.println(address.getHostAddress()); //public String getHostName()获取此 IP 地址的主机名。 System.out.println(address.getHostName()); }}
三.Socket编程
1.UDP协议的客户端/服务端的通信
客户端实现:UdpCliebt.java
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;/** * UDP协议特点: * 1.数据通过打包之后进行发送 * 2.不需要进行连接 * 3.数据大小有限制 * 4.协议属于不安全协议 * 5.效率比较高 */public class UdpClient { public static void main(String[] args) throws Exception { //1.创建udp协议发送端的socket对象 //public DatagramSocket() throws SocketException DatagramSocket ds = new DatagramSocket(); byte[] buf = "hello".getBytes(); int length = buf.length; InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 8888; //2.创建数据包 //public DatagramPacket(byte[] buf, int length,InetAddress address,int port) DatagramPacket dp = new DatagramPacket(buf, length, address, port); /** * 1.你要发送的数据 * 2.发送的数据的长度 * 3.你要发送给的电脑ip * 4.端口 */ //发送数据 ds.send(dp); //释放资源 ds.close(); }}
服务端实现:UdpServer.java
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;public class UdpServer { public static void main(String[] args) throws Exception { //创建接收端的socket对象 DatagramSocket ds = new DatagramSocket(8888); //创建一个数据包,用来接收来自发送端的数据,是一个空的数据包 byte[] buf = new byte[1024]; int length = buf.length; DatagramPacket dp = new DatagramPacket(buf, length); //接受来自发送端的数据 //public void receive(DatagramPacket p)throws IOException //程序在这里接收到来自发送端的数据之前一直处于阻塞状态 ds.receive(dp); //解析一下数据包中的数据 //public byte[] getData()返回数据缓冲区 byte[] data = dp.getData(); //public int getLength()返回将要发送或接收到的数据的长度 int len = dp.getLength(); System.out.println(new String(data,0,len)); //释放资源 ds.close(); }}
注意:应先启动服务器端,再启动客户端发送数据
2.TCP协议的客户端/服务端的通信
客户端:TcpClient.java
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class TcpClient { public static void main(String[] args) throws Exception { //创建tcp发送端的sockt对象 Socket sk = new Socket("127.0.0.1", 10000); //从通道中获取输出流 OutputStream os = sk.getOutputStream(); //网通道中写数据 os.write("今晚约吗".getBytes()); //接受来自服务器端的反馈 InputStream is = sk.getInputStream(); //解析is byte[] buf = new byte[1024]; int len = is.read(buf); System.out.println(new String(buf, 0, len)); //释放资源 sk.close(); }}
服务器端:TcpServer.java
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class TcpServer { public static void main(String[] args) throws Exception { //创建服务器端的socket对象 ServerSocket ss = new ServerSocket(10000); //监听来自客户端的连接 Socket sk = ss.accept(); //从通道中获取输入流读取数据 InputStream is = sk.getInputStream(); //解析is byte[] buf = new byte[1024]; int len = is.read(buf); System.out.println(new String(buf, 0, len)); //给客户端一个反馈 OutputStream os = sk.getOutputStream(); os.write("不约".getBytes()); //释放资源 sk.close(); }}
阅读全文
1 0
- 【Java学习笔记】23.网络编程--Socket
- Java学习笔记--网络编程Socket
- Socket网络编程学习笔记
- Socket网络编程学习笔记
- Socket网络编程学习笔记
- 网络编程 Socket 【java笔记】
- Java 网络编程 学习笔记二 Socket 用法
- Java网络编程学习笔记(2) socket用法
- JAVA学习笔记(网络编程 之 socket)
- Java网络编程学习笔记(五)客户端Socket
- Java网络编程学习笔记(六)服务器Socket
- Java SE学习笔记:网络编程,Socket,B/S
- 网络编程学习笔记一:Socket编程
- 网络编程学习笔记一:Socket编程
- 网络编程学习笔记一:Socket编程
- 网络编程学习笔记一:Socket编程
- 网络编程学习笔记一:Socket编程
- 网络编程学习笔记一:Socket编程
- Codeforces Round #407 (Div. 2)解题报告
- 在linux命令行下批量删除文件或文件夹
- 剑指offer 面试题40 数组中只出现一次的数字
- Kafka知识整理
- opencv---FileStorage
- 【Java学习笔记】23.网络编程--Socket
- Linux centos7 安装Hadoop单结点
- POJ 1278 BOAT 笔记
- 【React Native系列教程】构建React Native官方Examples
- scanf读取带有空格的字符串
- Java基础[5]-1-this和super;静态和动态绑定;equals与hashCode和toString
- UVa 10954 Add All ——优先队列
- Linux Command Line and....ch1(初识linux)
- 毒鸡汤