目录
UDP编程
UDP协议是无连接的、不可靠的、无序的,传输速度会比较快,以数据报为传输载体。也就是说,进行数据传输时,首先需要将要传输的数据定义为数据报(Datagram),在数据报中指明数据所要达到的主机地址和端口号(Socket),然后再将数据报发送出去。
具体两个相关操作类:
DatagramPacket(表示数据报包)、
DatagramSocket(进行端到端通信的类,实现基于UDP的Socket通信)
服务器端实现步骤:
1、创建DatagramSocket,并指定端口号;
2、创建DatagramPacket,用来接收客户端发送的数据;
3、接收客户端发送的数据信息;
4、读取数据。
public class UDPServer {
public static void main(String[] args) throws IOException {
// 1、创建服务器端DatagramSocket,指定端口号;
DatagramSocket socket=new DatagramSocket(8801);
//2、创建DatagramPacket,接收客户端数据;
byte[] data=new byte[1024];//创建字节数组,指定接收数据包的大小
DatagramPacket packet=new DatagramPacket(data,data.length);
//3、接收客户端发送的数据信息
System.out.println("**********服务器已启动,等待客户端发送数据*************");
socket.receive(packet);//此方法在接收到数据之前处于阻塞状态
//4、读取客户端数据信息
String info=new String(data,0,packet.getLength());
System.out.println("我是服务器,客户端说"+info);
/*
* 向客户端响应数据
*/
//1、定义客户端的地址、端口号和数据
InetAddress address=packet.getAddress();
int port=packet.getPort();
byte[] data2="欢迎您!".getBytes();
//2、创建数据报,包含相应的信息
DatagramPacket packet2=new DatagramPacket(data2,data2.length,address,port);
//3、响应客户端
socket.send(packet2);
//4、关闭端口信息
socket.close();
}
}
客户端实现步骤:
1、定义发送的数据信息,包括要发送的服务器的IP地址、端口号及发送的内容;
2、创建DatagramPacket,包含将要发送的信息;
3、创建DatagramSocket,实现数据的发送;
4、通过Socket发送数据。
public class UDPClint {
public static void main(String[] args) throws IOException {
// 1、定义服务器的地址、端口号和数据
InetAddress address=InetAddress.getByName("localhost");
int port=8808;
byte[] data="用户名:雅玲;密码:123".getBytes();
// 2、创建DatagramPacket,用来包含发送端数据信息
DatagramPacket packet=new DatagramPacket(data,data.length,address,port);
// 3、创建DatagramSocket,用于数据发送
DatagramSocket socket=new DatagramSocket();
// 4、进行发送数据
socket.send(packet);
/*
* 接收服务器端响应的数据
*/
//1、创建一个数据报用于接收服务器端响应的数据
byte[] data2=new byte[1024];
DatagramPacket packet2=new DatagramPacket(data2,data2.length);
//2、接收服务器端发送的数据信息
socket.receive(packet2);
//3、读取服务器端数据
String reply=new String(data2,0,packet2.getLength());
System.out.println("我是客户端,服务器说"+reply);
//4、关闭资源
socket.close();
}
}
TCP编程
Socket通信
TCP协议是面向有连接的、可靠的、有序的,以字节流的方式发送数据。
基于TCP协议实现网络通信的类有:客户端的Socket类、服务器端的ServerSocket类
输入流:InputStream 输出端:OutputStream
Socket通信实现步骤
1、在服务器端和客户端分别完成ServerSocket和Socket的创建,这是实现网络通信的基础;
2、打开连接到Socket的输入/输出流,进行数据的通信;
3、按照协议对Socket进行读/写操作;
4、关闭输入输出流通信资源,关闭Socket。
服务器端实现步骤
1、创建ServerSocket对象,绑定监听端口;
2、通过accept()方法监听客户端请求;
3、连接建立后,通过输入流读取客户端发送的请求信息;
4、通过输出流向客户端发送响应信息;
5、关闭相关资源
public class TCPServer {
public static void main(String[] args) {
try {
// 1、创建ServerSocket对象,绑定并监听端口
ServerSocket serverSocket=new ServerSocket(8818);
System.out.println("********服务器即将启动,等待客户端的连接************");
// 2、通过accept()监听客户请求,等待客户端的连接
Socket socket=serverSocket.accept();
// 3、获取输入流,并读取客户端的信息
InputStream is=socket.getInputStream(); //字节输入流
InputStreamReader isr=new InputStreamReader(is); //将字节流转换为字符流
BufferedReader br=new BufferedReader(isr);//为输入流添加缓冲
String info=null;
while((info=br.readLine())!=null){//循环读取客户端的信息
System.out.println("我是服务器,客户端说"+info);
}
socket.shutdownInput();//关闭输入流
// 4、获取输出流,响应客户端的请求
OutputStream oi=socket.getOutputStream();
PrintWriter ph=new PrintWriter(oi);//将输出流转换为打印流
ph.write("欢迎光临吖!");
ph.flush();
socket.shutdownOutput();//关闭输出流
// 5、关闭相关资源
oi.close();
ph.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端实现步骤
1、创建Socket对象,指明需要连接的服务器的地址和端口号;
2、连接建立后,通过输出流向服务器端发送请求信息;
3、通过输入流获取服务器响应的信息;
4、关闭相关资源。
public class TCPClint {
public static void main(String[] args) {
try {
// 1、创建Socket对象,指明需要连接的服务器的地址和端口号
Socket socket=new Socket("localhost",8818);
// 2、获取输出流,并向服务器发送请求
OutputStream os=socket.getOutputStream();//输出字节流
PrintWriter pw=new PrintWriter(os);// 将输出流转换为打印流
pw.write("用户名:雅玲;密码:123");
pw.flush();
socket.shutdownOutput();//关闭输出流
// 3、通过输入流向服务器发送请求
InputStream ih=socket.getInputStream();
InputStreamReader ihr=new InputStreamReader(ih); //将字节流转换为字符流
BufferedReader bh=new BufferedReader(ihr);//为输入流添加缓冲
String info1=null;
while((info1=bh.readLine())!=null){//循环读取服务器端的信息
System.out.println("我是客户端,服务器说"+info1);
}
socket.shutdownInput();//关闭输入流
//4.关闭相关资源
ih.close();
ihr.close();
bh.close();
os.close();
pw.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}