服务器端代码:

public class Service {  //服务器public static void main(String[] args) { ServerSocket serverSocket=null; Socket socket=null; try { //创建一个超市 serverSocket=new ServerSocket(8800); while(true){ //超市开门 等待顾客上门购物 怎么保证超市是24消失营业的?? socket = serverSocket.accept(); //使用多线程来实现多个顾客能同时购物 同时结账 ServiceThread thread=new ServiceThread(socket); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } }

服务器需要的线性类:

public class ServiceThread extends Thread { //没启动一个线程 就相当于有一个顾客 进入 超市 Socket socket=null; public ServiceThread(Socket socket) { this.socket=socket; } @Override public void run() { InputStream is=null; OutputStream os=null; ObjectInputStream ois=null; //反序列化 try { //拿出钱包,推上购物车 is=socket.getInputStream(); os=socket.getOutputStream(); //反序列化 获取 顾客的信息 ois=new ObjectInputStream(is); User user=(User) ois.readObject(); //读到进入超市的顾客信息 if (user!=null) { System.out.println("服务器说:您的姓名是:"+user.getUserName()); } //给顾客一个回应 os.write("欢迎您的光临".getBytes()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally{ try { os.close(); ois.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } } }

客户端代码:

public class Client1 {  //第一个顾客public static void main(String[] args) { Socket socket=null; InputStream is=null; OutputStream os=null; ObjectOutputStream oos=null; //接收服务器的信息 读 BufferedReader br=null; try { //进入了我们指定的 超市购物 socket=new Socket("localhost", 8800); is=socket.getInputStream(); os=socket.getOutputStream(); //序列化对象 oos=new ObjectOutputStream(os); User user=new User("小黑黑1", "admin"); oos.writeObject(user); //购物完毕 shutdownOutput 与 close  socket.shutdownOutput(); //接收到服务器给你说的 欢迎光临 br=new BufferedReader(new InputStreamReader(is)); String line=null; while((line=br.readLine())!=null){ System.out.println("我是客户端:服务器 对我说:"+line); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); oos.close(); os.close(); is.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }

基于UDP的客户端代码:

public class Service { // 服务器public static void main(String[] args) { DatagramPacket dp = null; //打包 和 拆包数据 DatagramSocket ds = null; // 接收和 发送数据 //创建一个包 给客户端响应 DatagramPacket dpTo=null; try { byte [] buf=new byte[1024]; //创建数据包的对象 dp=new DatagramPacket(buf, buf.length); ds=new DatagramSocket(8800); //接收  ds.receive(dp); //显示接收的信息 拆包 String msg=new String(dp.getData(), 0, dp.getLength()); //获取 对方的地址 客户端的信息 System.out.println(dp.getAddress().getHostAddress()+"说====:"+msg); //回复给 客户端 byte[] reply="您好!航母已经发货!".getBytes(); // dp就是从客户端传来的信封 信封上肯定有 寄件人的地址 SocketAddress address=dp.getSocketAddress(); //打包成功 dpTo=new DatagramPacket(reply, reply.length,address); //发送  ds.send(dpTo); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

基于UDP的客户端代码:

public class Client {    //客户端public static void main(String[] args) { DatagramPacket dp = null; //打包 和 拆包数据 DatagramSocket ds = null; // 接收和 发送数据 //创建一个包 给服务器响应 DatagramPacket dpTo=null; InetAddress address=null; try { //你在网上购物 要不要给客服 说你的地址 byte[] say="买个航空母舰!".getBytes(); //获取本机的地址! address = InetAddress.getByName("localhost"); //打包 dp=new DatagramPacket(say, say.length,address,8800); //发送 ds=new DatagramSocket(); ds.send(dp); //接收 byte [] buf=new byte[1024]; dpTo=new DatagramPacket(buf, buf.length); ds.receive(dpTo); //我们看客服给我们回复了 什么 拆包 String reply=new String(dpTo.getData(),0,dpTo.getLength()); System.out.println(dpTo.getAddress().getHostAddress()+"说===》"+reply); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

转载于:https://www.cnblogs.com/xiaobaizhang/p/7761722.html

使用多线程完成Socket相关推荐

  1. java游戏输赢统计_java利用多线程和Socket实现猜拳游戏

    本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...

  2. 递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池

    递归锁.信号量.GIL锁.基于多线程的socket通信和进程池线程池 递归锁 死锁现象:是指两个或两个以上的进程和线程因抢夺计算机资源而产生的一种互相等待的现象 from threading impo ...

  3. java多线程 游戏_java利用多线程和Socket实现猜拳游戏

    本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...

  4. Qt中采用多线程实现Socket编程

    Qt中采用多线程实现Socket编程 Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 本文介绍的是Qt中采用多线程 ...

  5. 你值得拥有!-阿里P8架构师荣耀典藏:Java多线程与Socket实战微服务框架笔记

    先赞再看,谢谢关注 小编分享的这份<Java多线程与Socket:实战微服务框架>,综合运用Java多线程.Socket.动态代理等技术来构建微服务框架 内容结构 本书从实战角度出发,首先 ...

  6. jsd 多线程与socket网络通信

    多线程与socket网络通信 一.多线程 什么是多线程? 百度:"多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件 ...

  7. 嵌入式开发日记(9)——多线程与socket通信

    尝试用多线程,socket网络编程,心跳检测机制,实时绘图,丢包检测机制,校验位检测,超时重传机制,  数据库存储等功能优化项目 多线程与socket编程: 参考链接: https://blog.cs ...

  8. 多线程Java Socket编程示例(转)

    这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送 ...

  9. 多线程Java Socket编程示例

    采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package sterning; import java.io.B ...

  10. 多线程和Socket——在线聊天室

    多线程开发和Socket技术 一.进程和线程 进程:每个应用程序对应一个进程: 线程:一个进程至少包含一个线程,线程要和CPU进行交互. 多线程并发(可以理解为):"同一时间"执行 ...

最新文章

  1. 凯明MAE被超越了?字节跳动iBOT刷新十几项SOTA
  2. SHOI2008仙人掌图(tarjan+dp)
  3. time datetime 模块
  4. C#语言学习思维导图
  5. 初学Java开发,这9本书值得一看
  6. (装载)C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别
  7. [翻译] 初看 ASP.NET Core 3.0 即将到来的变化
  8. c++ map初始化同时赋值_Golang入门教程——map篇
  9. Modown收费资源下载 WordPress 1.7主题+Erphpdown插件
  10. layui框架使用总结
  11. 【华为云技术分享】如何整合hive和hbase
  12. 数据挖掘:围绕 统计与概率、分类与聚类、检索方法 ,原理演示或应用程序
  13. 交比不变性 matlab,高等几何答案
  14. 聚合矩阵+中心化处理
  15. 03-linux查询端口
  16. 重拾Excel之为什么
  17. 服务器打微软补丁后无法启动,关于打了最新微软补丁后,针式打印机突然不好打印的处理方法。...
  18. Maya中英文对照表(四)
  19. pspice计算机仿真实验,基于OrCAD_PSpice二阶动态电路的计算机仿真分析
  20. java 找不到或无法加载主类 test_JAVA报找不到或无法加载主类的错误

热门文章

  1. Forefront TMGUAG
  2. face3000 c++ 代码运行
  3. C++递归或非递归实现求斐波拉契数列第n项
  4. 树莓派无法安装mariadb_RaspberryPi(树莓派)安装 MariaDB 数据库没有办法远程访问...
  5. 名为 cursor_jinserted 的游标不存在_你还在买丑橘吗?知道的人不多,看完后记得告诉身边人...
  6. Fiddler请求过滤
  7. ChaiNext:ETH底部试探后反弹,测试1500关口
  8. SAP License:SAP软件实施要点
  9. SAP License:SAP记账码
  10. SAP License:SAP中的成本核算模型(调侃版)