【网络编程】
【Socket】(套接字)[锁k特]
Socket就是封装了IP地址+端口号;
【网络通信三要素】
1. IP地址:为了找到目标计算机
点分十进制表示法:比如 192.168.1.1
2. 端口号: 为了找到目标应用程序 取值 0~65535 , 0~1023 作为系统使用或者保留
3. 传输协议:传输数据所遵守的规则
1 . UDP:
1.1 面向无连接
1.2 不可靠(不安全)
1.3 有大小限制(64K)
1.4 效率高
应用场景:视频聊天
2 . TCP
2.1 面向连接(三次握手)
2.2 可靠(可靠)
2.3 没有大小限制
2.4 效率低
应用场景:文件下载
通讯的规则
常见协议
网络编程至少需要几个Socket?
答:2个
【InetAddress】[爱赖特 饿拽丝]
InetAddress:此类表示互联网协议 (IP) 地址。
//static InetAddress getByName(String host)
InetAddress address = InetAddress.getByName("itheima");
通过主机名来获取IP地址
InetAddress address = InetAddress.getByName("192.168.1.107");
通过IP地址获取IP地址
String hostAddress = address.getHostAddress();
//192.168.1.107 返回IP地址
String hostName = address.getHostName();
//itheima 返回主机名
getLocalHost()(获取本地ip地址)[落阔 厚丝特]
【协议】
【UDP协议】
使用UDP协议发送数据
创建发送端Socket对象
创建数据并打包
发送数据 ds.send(dp);
释放资源
* DatagramSocket:[得特 个软 锁k特]此类表示用来发送和接收数据,基于UDP协议的
*
* DatagramSocket() :创建Socket对象并随机分配端口号
* DatagramSocket(int port) :创建Socket对象并指定端口号
*/
使用UDP协议接收数据
创建接收端Socket对象
接收数据 ds.receive(dp);//
接收之前得新建一个空的数据包
解析数据
输出数据
释放资源
InetAddress address = dp.getAddress();
获取发送端的IP对象
byte[] data = dp.getData();
获取接收到的数据,也可以直接使用创建包对象时的数组
int length = dp.getLength();
获取具体收到数据的长度
【TCP协议】
使用TCP协议发送数据
创建发送端Socket对象(创建连接)
Socket s = new Socket(InetAddress.getByName("itheima"),10086);
获取输出流对象
OutputStream os = s.getOutputStream();
发送数据
String str = "hello tcp,im comming!!!";
os.write(str.getBytes());
释放资源
使用TCP协议接收数据 ServerSocket [色玩 锁k特] accept[饿k C可特]
创建接收端Socket对象
ServerSocket ss = new ServerSocket(10086);
监听(阻塞)
Socket s = ss.accept();
获取输入流对象
InputStream is = s.getInputStream();
获取数据
byte[] bys = new byte[1024];
int len;//用于存储读到的字节个数
len = is.read(bys);
输出数据
InetAddress address = s.getInetAddress();
System.out.println("client ---> " + address.getHostName());
System.out.println(new String(bys,0,len));
释放资源
s.close();
http协议 应用层
UDP TCP 传输层
|
|