A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2018-9-26 16:17 编辑

【郑州校区】大数据基础加强阶段2之Socket 机制
4.1 . Socket概述
Socket,又称为套接字,用于描述 IP 地址和端口。应用程序通常通过 socket
向网络发出请求或者应答网络请求。Socket 就是为网络编程提供的一种机制: 通信两端都有 socket;
网络通信其实就是 socket 之间的通信; 数据在两个 socket 之间通过 IO 传输。
网络编程也称作为 Socket 编程,套接字编程。
Socket 通信是 Client/Server 模型。
4.2 . 基于 UDP协议的 Socket通信
核心类:DatagramSocket
发送端:
[AppleScript] 纯文本查看 复制代码
// 创建发送端 Socket 服务对象 
DatagramSocket dSocket = new DatagramSocket(); 
 
// 创建数据,打包数据 
String message = "hello ,are u UDP ?"; byte[] bys = message.getBytes(); 
int length = bys.length; 
InetAddress address = InetAddress.getByName("localhost"); int port = 12621; 
DatagramPacket dPacket = new DatagramPacket(bys, length, address, port); 
         
// 发送数据dSocket.send(dPacket); 
         
// 资源释放dSocket.close(); 
接收端:
[AppleScript] 纯文本查看 复制代码
//创建接收端 Socket 服务对象 
 DatagramSocket dSocket = new DatagramSocket(12621); 
  
 //创建数据包(接收容器) 
 byte[] bys = new byte[1024]; 
DatagramPacket dPacket = new DatagramPacket(bys, bys.length); 
  
 //调用接收方法 
 dSocket.receive(dPacket); 
  
 //数据包解析 
 InetAddress address = dPacket.getAddress(); 
 String hostAddress = address.getHostAddress(); 
  
 byte[] data = dPacket.getData(); 
 String message = new String(data); 
  
 System.out.println(hostAddress+"*********:"+message); 
  
 //资源释放 
 dSocket.close(); 


4.3 . 基于 TCP协议的 Socket通信
服务端
核心 API:ServerSocket
流程:  
创建 ServerSocket 服务,然后绑定在服务器的 IP 地址和端口监听连接请求
接受请求,建立了 TCP 连接获取输入流读取数据,并显示释放资源
[AppleScript] 纯文本查看 复制代码
//建立服务端 socket 服务,并且监听一个端口ServerSocket ss = new ServerSocket(13131); 

//监听连接 
Socket s = ss.accept(); 

//获取输入流,读取数据 
InputStream inputStream = s.getInputStream(); byte[] bys = new byte[1024]; 
int len = inputStream.read(bys); 

System.out.println(new String(bys, 0, len)); 
//关闭客户端s.close(); 

//关闭服务端,一般服务端不关闭ss.close(); 


客户端
核心 API:Socket
流程: 创建客户端 socket 对象
向服务端请求建立 tcp 连接
从 tcp 连接中获取输出流,写数据
  释放资源
[AppleScript] 纯文本查看 复制代码
//创建客户端的 socket 服务,指定目的主机和端口Socket s = new Socket("127.0.0.1", 13131); 
 
//通过 socket 获取输出流,写数据 
OutputStream outputStream = s.getOutputStream(); outputStream.write("hello ,this is tcp?".getBytes()); 
 
//释放资源s.close(); 
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马