黑马程序员技术交流社区
标题:
[石家庄校区]JavaEE网络编程笔记
[打印本页]
作者:
g207776411
时间:
2018-4-23 15:45
标题:
[石家庄校区]JavaEE网络编程笔记
本帖最后由 小石姐姐 于 2018-4-26 14:17 编辑
JavaEE网络编程笔记
Day_12网络编程与协议
创建发送端Socket对象
创建数据并打包
发送数据
释放资源
网络编程
让不同计算机上运行的程序可以通过网络进行数据交换
Socket: 中文名译为套接字
不是协议,而是对协议的封装,提供了编程规范接口,让程序员可以通过它来实现相关网络协议
用于描述IP地址和端口,是一种网络编程机制,通信的两端,不管是发送方还是接收方都需要有Socket
计算机上一般会有多个服务程序,每个服务程序会使用多个Socke进行网络通信,每个Socket会绑定到一个端口上,网络通信就是Socket之间的通信,数据在两个Socket之间通过IO流进行传输
网络编程中分为两种协议
UDP协议和TCP协议
UPDP协议发送接收数据
发送数据
/*
* // 1. 为发送端创建Socket对象(DatagramSocket)
DatagramSocket datagramSocket = new DatagramSocket();
// 2. 创建数据并打包
DatagramPacket datagramPacket = new DatagramPacket(byte数组, 数组长度, InetAddress对象, 端口号);
// 3. 发送数据
datagramSocket.send(datagramPacket);
// 4. 释放资源
datagramSocket.close();
*/
public class SendDemo {
public static void main(String[] args) throws IOException {
// 先创建 DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
// 创建一个空包来存放数据 ,并且要给包指定地址,要发送的东西和发多少,端口号
String s = "这是UDP";
// 将字符串转换成字节数组
byte[] by = s.getBytes();
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getByName("192.168.1.116"), 8870);
ds.send(dp);
// 关闭资源
ds.close();
}
}
//接收数据
* 接收 本地主机 发送过来
”Hello,I am comming”
利用DatagramSocket和DatagramPacket完成
接收端,并打印发送过来的数据
*/
public class ReceiveDemo {
// public static void main(String[] args) throws IOException {
// // 创建接收端接收端口号
// DatagramSocket ds = new DatagramSocket(8870);
// // 创建空包接收
// byte[] by = new byte[1024];
// DatagramPacket packet = new DatagramPacket(by, by.length);
// // 接收数据
// ds.receive(packet);
//
// // 解析数据
// // 获取了Ip地址
// InetAddress address = packet.getAddress();
// // 将获取到的字符数组解析
// byte[] data = packet.getData();
// // 接收多少,我们就输出多少
// String msg = new String(data, 0, packet.getLength());
//
// System.out.println("[" + address + "]发来消息:" + msg);
//
// // 关闭数据
// ds.close();
//
// }
public static void main(String[] args) throws IOException {
// 创建协议对象接收定义的端口号
DatagramSocket dp = new DatagramSocket(8870);
// 创建一个空包来接收
byte[] by = new byte[1024];
DatagramPacket dg = new DatagramPacket(by, by.length);
// 接收数据
dp.receive(dg);
//解析数据
//第一步先获取到数据
byte[] data=dg.getData();
String str=new String(data,0,dg.getLength());
System.out.println("我收到你发送的数据了:"+str+"\t原来你是"+dg.getAddress().getHostName());
}
}
TCP协议发送数据
java.net.Socket类: 基于TCP协议的Socket, 作为客户端
构造方法
Socket(InetAddress add, int port): 创建TCP客户端对象
成员方法
OutputStream getOutputStream(): 获取输出流对象,
用于发送数据
InputStream getInputStream(): 获取输入流,
用于接收数据
void close(): 释放资源
TCP发送数据步骤
// 1. 创建客户端Socket对象(建立连接)
Socket socket = new Socket(InetAddress地址, 端口号);
// 2. 获取输出流对象
OutputStream outputStream = socket.getOutputStream();
// 3. 发送数据
outputStream.write(byte数组);
// 4. 释放资源
socket.close();
连接失败异常:
ConnectException: Connection refused: connect: 连接被拒绝, 无法创建连接. 一般是因为网络不通, IP地址不存在等导致无法连接
解决办法:
确认必须有接收端, 且可以连接
TCP协议接收数据
java.net.ServerSocket: TCP服务端
构造方法
ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口
成员方法
Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象
void close(): 关闭Socket
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2