博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
客户端与服务器通信(版本4)
阅读量:3962 次
发布时间:2019-05-24

本文共 2923 字,大约阅读时间需要 9 分钟。

解决了版本三的不能连续发送消息 实现了全双工

思路:创建一个新的线程来实现数据的发送,main线程用于接受数据

客户端

//服务端可以不断的发送信息给客户端  也可以不断的接受客户端的信息//一个客户端   一个服务器public class Client04 {
static Scanner sc = new Scanner(System.in); static Socket socket; public static void main(String[] args) {
//创建客户端套接字 用户交互服务器 try {
socket = new Socket("127.0.0.1", 8004); //根据套接字获取输出流 把信息从内存拿出来就是输出 写进内存就是输入 new Thread(()->{
while (true) {
try {
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String s = null; s = dataInputStream.readUTF(); System.out.println(s); } catch (IOException e) {
e.printStackTrace(); } } //获取服务端发过来的消息 }).start(); while (true) {
OutputStream outputStream = socket.getOutputStream(); //将字节输出流包装成数据字节输出 DataOutputStream dataOutputStream = new DataOutputStream(outputStream); dataOutputStream.flush(); //这行代码的确定缺点 程序会阻塞在这里等待输入 dataOutputStream.writeUTF("客户端说:"+sc.next()); } } catch (IOException e) {
e.printStackTrace(); } }}

服务器

//服务端可以不断的发送信息给客户端  也可以不断的接受客户端的信息//一个客户端   一个服务器public class Server04 {
static Scanner sc = new Scanner(System.in); static ServerSocket serverSocket; static Socket socket; public static void main(String[] args) {
//创建服务端套接字ServerSocket 并指定端口号 try {
serverSocket = new ServerSocket(8004); //通过服务端套接字 监听客户端的连接 如果没有客户端连接 程序会停留在此处 socket = serverSocket.accept();//返回的就是客户端的套接字 获取一个连接 //创建一个新的线程来服务器给客户端发送数据 new Thread(()->{
try {
while (true) {
//服务端继续给客户端发送消息 这里使用socket 而不是serverSocket 是因为服务端只有一个 客户端有很多个 给指定客户端发信息 DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("服务端说:"+sc.next()); dataOutputStream.flush(); } } catch (IOException e) {
e.printStackTrace(); } }).start(); while(true) {
//根据客户端套接字 获取对应的输入流 InputStream inputStream = socket.getInputStream(); //将字节输入流包装成 数据字节流 DataInputStream dataInputStream = new DataInputStream(inputStream); String s = dataInputStream.readUTF(); System.out.println(s); } } catch (IOException e) {
e.printStackTrace(); } }}

转载地址:http://amhzi.baihongyu.com/

你可能感兴趣的文章
echo如何手动输出换行
查看>>
身份证的正确使用方法——非常重要的知识
查看>>
ExtJS & Ajax
查看>>
Tomcat在Windows下的免安装配置
查看>>
JMeter常用测试元件
查看>>
JMeter——使用技巧
查看>>
Hibernate 实体层设计--Table per subclass
查看>>
JavaScriptHelper之 observe_field
查看>>
JavaScriptHelper之 periodically_ajax_tag
查看>>
Ruby on Rails(ROR) 小结(一) 绑定controller and view
查看>>
Ruby on Rails(ROR) 小结(一) 通过Schema Migrations来创建数据表
查看>>
form表单post请求发送及回收
查看>>
confluence5.8.10 安装与破解
查看>>
Testlink使用文档
查看>>
Ruby on Rails(ROR) 实例开发之一 配置数据库Mysql
查看>>
Ruby on Rails(ROR) 实例开发之一 创建开发项目环境
查看>>
Ruby on Rails(ROR) 实例开发之一 创建数据表
查看>>
Android_Note(一)——主题界面设计
查看>>
Android_Note(二)——主界面功能
查看>>
Android开发之——子线程中使用Toast或者更新UI
查看>>