[进阶]网络通信:TCP通信,一发一收,多发多收

TCP通信

  • 特点:面向连接、可靠通信
  • 通信双方事先会采用 “三次握手〞 方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。
  • Java提供了一个java.net.socket类来实现TCP通信。

TCP通信——客户端开发

  • 客户端程序就是通过java.net包 下的Socket类来实现的。

 

 

 代码演示如下:

public class Client {public static void main(String[] args) throws Exception{System.out.println("客户端开启!");//1.创建Socket对象,并同时请求与服务端程序的连接。Socket socket = new Socket("127.0.0.1",8888);//2.从socket通信管道中得到一个字节输出流。用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3.把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);//4.开始写数据出去了dos.writeUTF("你好,Java!");dos.close();socket.close(); // 释放连接资源}
}

TCP通信——服务端的开发

  • 服务端是通过java.net包 下的Serversocket类来实现的。

 

 代码演示如下:

public class Server {public static void main(String[] args) throws Exception{System.out.println("服务端开启!");//1.创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2.使用serverSocket对象,嗲用一个accept方法,等待客户端的连接请求Socket socket = serverSocket.accept();//3.从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();//4.把原始的字节输入流包装成数据输入流DataInputStream dis = new DataInputStream(is);//5.使用数据输入流读取客户端发送过来的消息String rs = dis.readUTF();System.out.println(rs);//还可以获取客户端的IP地址System.out.println(socket.getRemoteSocketAddress());dis.close();socket.close();}
}

实现多发多收,就要把代码改成循环。具体演示看下面部分代码:
客户端:

public class Client {public static void main(String[] args) throws Exception{System.out.println("客户端开启!");//1.创建Socket对象,并同时请求与服务端程序的连接。Socket socket = new Socket("127.0.0.1",8888);//2.从socket通信管道中得到一个字节输出流。用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3.把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入:");String msg = sc.nextLine();//一旦用户输入了exit,就退出客户端程序if ("exit".equals(msg)){System.out.println("退出成功!");dos.close();socket.close();break;}//4.开始写数据出去了dos.writeUTF(msg);dos.flush();}}
}

服务端:

public class Server {public static void main(String[] args) throws Exception{System.out.println("服务端开启!");//1.创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2.使用serverSocket对象,嗲用一个accept方法,等待客户端的连接请求Socket socket = serverSocket.accept();//3.从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();//4.把原始的字节输入流包装成数据输入流DataInputStream dis = new DataInputStream(is);while (true) {try {//5.使用数据输入流读取客户端发送过来的消息String rs = dis.readUTF();System.out.println(rs);} catch (Exception e) {System.out.println(socket.getRemoteSocketAddress() + "离线了~");dis.close();socket.close();}}}
}

本文链接:https://my.lmcjl.com/post/12101.html

展开阅读全文

4 评论

留下您的评论.