Socket复习
UDP
客户端模拟
public class Demo {
public static void main(String[] args) throws IOException {
//模拟UDP通信
//客户端
//* 1.创建UDP通信的对象-socket对象:对应的类是DatagramSocket.(用于UDP数据的发送与接收)
DatagramSocket socket = new DatagramSocket();
//准备数据
byte[] buf = "bingbing".getBytes();
/* 打包数据
* 参数一:要传输的数据
* 参数二:数据的长度
* 参数三:服务器所在主机的地址
* 参数四:服务器的端口
*/
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 20000);
//* 3.发送数据,通过send方法
socket.send(packet);
//* 4.关闭socket对象
socket.close();
}
}
服务端模拟
public class Demo5 {
public static void main(String[] args) throws IOException {
System.out.println("启动服务器成功,可以随时接收数据");
// * 1.创建socket对象,并绑定端口号---DatagramSocket
DatagramSocket socket = new DatagramSocket(20000);
//不断的接收数据
while (true) {
//* 2.创建包对象,创建空数组,准备接收传来的数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//* 3.接收数据:当服务器运行起来,让他一直处于监听状态的方法
socket.receive(packet);
//显示所有数据
byte[] bytes = packet.getData();
String data = new String(bytes);
System.out.println(new String(bytes));
//当输入over的时候结束
if (data.trim().equals("over")) {
break;
}
}
//* 4.关闭相关的对象
socket.close();
}
}
UDP就是一种把数据打包然后丢出去的过程。
TCP
模拟客户端
public class Demo10 {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建Socket对象并绑定服务器的地址和端口
Socket socket = new Socket(InetAddress.getLocalHost(), 22200);
//2.准备数据---实现让用户从控制台输入
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
//3.获取socket内部的输出流
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream,true);
//当第二个参数为true的时候,会自动刷新,只有调用println/printf方法是起作用.
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader2 = new BufferedReader(new InputStreamReader(inputStream));
String data = null;
while ((data = bufferedReader.readLine()) != null) {
printWriter.println(data);
//当输入over的时候,代表结束
if ("over".equals(data)) {
break;
}
//接收从服务器传回的数据
//将内容写到控制台
String data2 = bufferedReader2.readLine();
System.out.println("data1:"+data2);
}
//5.关闭资源
bufferedReader.close();
bufferedReader2.close();
printWriter.close();
socket.close();
}
}
模拟服务端
public class Demo11 {
public static void main(String[] args) throws IOException {
//1.创建ServerSocket对象并绑定接口
ServerSocket serverSocket = new ServerSocket(22200);
//2.接收套接字的连接,保证客户端与服务器端使用同一个socket对象---一直处于监听的状态
Socket socket = serverSocket.accept();
//3.获取输入流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取输出流
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
//读写过程
String data = null;
while ((data = bufferedReader.readLine()) != null) {
//打印到控制台
System.out.println(data.toUpperCase());
//实现将服务器的数据写回客户端
//这里必须使用println,不能用print
printWriter.println(data.toUpperCase());
//当输入over的时候,代表结束
if ("over".equals(data)) {
break;
}
}
//5.关闭资源
bufferedReader.close();
printWriter.close();
serverSocket.close();
}
}