黑马程序员技术交流社区
标题: 【郑州校区】大数据基础加强阶段2之Socket 机制 [打印本页]
作者: 我是楠楠 时间: 2018-9-26 16:12
标题: 【郑州校区】大数据基础加强阶段2之Socket 机制
本帖最后由 我是楠楠 于 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号楼三层
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |