全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java--Socket通信(客户端服务端双向)

新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端

两个工程的读写操作线程类基本上完全相同

服务端:

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class Server { 
 
  public static final int PORT = 8000;//监听的端口号   
 
  public static void main(String[] args) {  
    Server server = new Server();  
    server.init();  
  }  
 
  public void init() {  
    ServerSocket serverSocket = null; 
    try {  
      serverSocket = new ServerSocket(PORT);  
      while (true) {  
        Socket client = serverSocket.accept();  
        //一个客户端连接就开户两个线程处理读写  
        new Thread(new ReadHandlerThread(client)).start();  
        new Thread(new WriteHandlerThread(client)).start();  
      }  
    } catch (Exception e) {  
      e.printStackTrace();  
    } finally{ 
      try { 
        if(serverSocket != null){ 
          serverSocket.close(); 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
  }  
}  
 
/* 
 *处理读操作的线程  
 */ 
class ReadHandlerThread implements Runnable{ 
  private Socket client; 
 
  public ReadHandlerThread(Socket client) { 
    this.client = client; 
  } 
 
  @Override 
  public void run() { 
    DataInputStream dis = null; 
    try{ 
      while(true){ 
        //读取客户端数据  
        dis = new DataInputStream(client.getInputStream()); 
        String reciver = dis.readUTF(); 
        System.out.println("客户端发过来的内容:" + reciver);  
      } 
    }catch(Exception e){ 
      e.printStackTrace(); 
    }finally{ 
      try { 
        if(dis != null){ 
          dis.close(); 
        } 
        if(client != null){ 
          client = null; 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
} 
 
/* 
 * 处理写操作的线程 
 */ 
class WriteHandlerThread implements Runnable{ 
  private Socket client; 
 
  public WriteHandlerThread(Socket client) { 
    this.client = client; 
  } 
 
  @Override 
  public void run() { 
    DataOutputStream dos = null; 
    BufferedReader br = null; 
    try{ 
      while(true){ 
        //向客户端回复信息  
        dos = new DataOutputStream(client.getOutputStream());  
        System.out.print("请输入:\t");  
        // 键盘录入  
        br = new BufferedReader(new InputStreamReader(System.in)); 
        String send = br.readLine();  
        //发送数据 
        dos.writeUTF(send);  
      } 
    }catch(Exception e){ 
      e.printStackTrace(); 
    }finally{ 
      try { 
        if(dos != null){ 
          dos.close(); 
        } 
        if(br != null){ 
          br.close(); 
        } 
        if(client != null){ 
          client = null; 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
} 

客户端:

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.Socket; 
 
public class Client { 
 
  public static final String IP = "localhost";//服务器地址  
  public static final int PORT = 8000;//服务器端口号  
 
  public static void main(String[] args) {  
    handler();  
  } 
 
  private static void handler(){ 
    try { 
      //实例化一个Socket,并指定服务器地址和端口 
      Socket client = new Socket(IP, PORT); 
      //开启两个线程,一个负责读,一个负责写 
      new Thread(new ReadHandlerThread(client)).start(); 
      new Thread(new WriteHandlerThread(client)).start(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
}  
 
/* 
 *处理读操作的线程  
 */ 
class ReadHandlerThread implements Runnable{ 
  private Socket client; 
 
  public ReadHandlerThread(Socket client) { 
    this.client = client; 
  } 
 
  @Override 
  public void run() { 
    DataInputStream dis = null; 
    try { 
      while(true){ 
        //读取服务器端数据  
        dis = new DataInputStream(client.getInputStream()); 
        String receive = dis.readUTF();   
        System.out.println("服务器端返回过来的是: " + receive);  
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally{ 
      try { 
        if(dis != null){ 
          dis.close(); 
        } 
        if(client != null){ 
          client = null; 
        } 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
} 
 
/* 
 * 处理写操作的线程 
 */ 
class WriteHandlerThread implements Runnable{ 
  private Socket client; 
 
  public WriteHandlerThread(Socket client) { 
    this.client = client; 
  } 
 
  @Override 
  public void run() { 
    DataOutputStream dos = null; 
    BufferedReader br = null; 
    try { 
      while(true){ 
        //取得输出流 
        dos = new DataOutputStream(client.getOutputStream()); 
        System.out.print("请输入: \t");  
        //键盘录入 
        br = new BufferedReader(new InputStreamReader(System.in)); 
        String send = br.readLine();  
        //发送数据 
        dos.writeUTF(send);  
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally{ 
      try{ 
        if(dos != null){ 
          dos.close(); 
        } 
        if(br != null){ 
          br.close(); 
        } 
        if(client != null){ 
          client = null; 
        } 
      }catch(Exception e){ 
        e.printStackTrace(); 
      } 
    } 
  } 
} 

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # socket双向通信  # java的socket通信  # java实现socket通信  # Java通过socket客户端保持连接服务端实现代码  # java客户端线上Apollo服务端的实现  # Java基于socket实现的客户端和服务端通信功能完整实例  # Java编程Socket实现多个客户端连接同一个服务端代码  # java实现socket客户端连接服务端  # 简单的java socket客户端和服务端示例  # java实现protocol传输的客户端和服务端的示例代码  # 客户端  # 服务端  # 请输入  # 的是  # 端口号  # 大家多多  # 完全相同  # final  # int  # PORT  # public  # Socket  # static  # Server 


相关文章: 宝塔面板创建网站无法访问?如何快速排查修复?  如何设置并定期更换建站之星安全管理员密码?  建站主机选购指南与交易推荐:核心配置解析  建站之星安装后如何配置SEO及设计样式?  大同网页,大同瑞慈医院官网?  Swift中swift中的switch 语句  如何高效利用200m空间完成建站?  黑客入侵网站服务器的常见手法有哪些?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  ,交易猫的商品怎么发布到网站上去?  如何在Ubuntu系统下快速搭建WordPress个人网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  香港服务器如何优化才能显著提升网站加载速度?  建站之星备案流程有哪些注意事项?  如何制作一个表白网站视频,关于勇敢表白的小标题?  开封网站制作公司,网络用语开封是什么意思?  C++中引用和指针有什么区别?(代码说明)  如何用低价快速搭建高质量网站?  音响网站制作视频教程,隆霸音响官方网站?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  再谈Python中的字符串与字符编码(推荐)  如何在橙子建站中快速调整背景颜色?  行程制作网站有哪些,第三方机票电子行程单怎么开?  网站制作公司排行榜,抖音怎样做个人官方网站  实现点击下箭头变上箭头来回切换的两种方法【推荐】  焦点电影公司作品,电影焦点结局是什么?  如何基于云服务器快速搭建个人网站?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  开心动漫网站制作软件下载,十分开心动画为何停播?  金*站制作公司有哪些,金华教育集团官网?  香港服务器部署网站为何提示未备案?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  建站主机CVM配置优化、SEO策略与性能提升指南  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  ,制作一个手机app网站要多少钱?  如何通过建站之星自助学习解决操作问题?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何快速搭建FTP站点实现文件共享?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何用花生壳三步快速搭建专属网站?  建站之星3.0如何解决常见操作问题?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  建站主机数据库如何配置才能提升网站性能?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  建站之星24小时客服电话如何获取?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何快速完成中国万网建站详细流程?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。