效果图


目录结构

服务端Server
package server;import thread.SocketReader;
import thread.SocketWrite;import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class Server {public static void main(String[] args) throws Exception{PrintWriter out=null;Scanner get = null;ServerSocket server=new ServerSocket(8888);System.out.println("服务器正在运行,等待客户端连接!");while (true){Socket client=new Socket();client=server.accept();System.out.println(client.getInetAddress()+" 已成功连接到此台服务器上。");out = new PrintWriter(client.getOutputStream());get = new Scanner(client.getInputStream());new SocketWrite(out).start();new SocketReader(get).start();}}
}
客户端Client
package client;import thread.SocketReader;
import thread.SocketWrite;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception{PrintWriter out=null;Scanner get = null;Socket client=new Socket("127.0.0.1",8888);get = new Scanner(client.getInputStream());out = new PrintWriter(client.getOutputStream());new SocketReader(get).start();new SocketWrite(out).start();}
}
写入消息SocketWriter
package thread;
import java.io.PrintWriter;
import java.util.Scanner;public class SocketWrite extends Thread{private Scanner scanner;private PrintWriter out;private Scanner get_key = null;public SocketWrite(PrintWriter out){this.out=out;}public void  run(){out.println("已成功连接到远程服务器!");out.flush();//将缓冲流中的数据全部输出while(true){try{get_key = new Scanner(System.in);String msg=get_key .nextLine();out.println(msg);out.flush();//    System.out.println("请输入消息:");}catch(Exception e){System.out.println("连接已断开!");return;}}}
}
读取消息SocketReader
package thread;
import java.io.ByteArrayOutputStream;
import java.util.Scanner;public class SocketReader extends Thread{private Scanner get;public SocketReader(Scanner get){this.get=get;}public void  run(){while(true){try{while(true){System.out.println("收到对端消息:"+get.nextLine());//  System.out.print("输入消息:");}}catch(Exception e){System.out.println("连接已中断");return;}}}
}
Socket实现客户端和服务端持续通信;

1.单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。

2.半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。

3.全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。

Java中Socket实现客户端和服务端通信(多线程实现全双工通信)相关推荐

  1. 在Java中使用Socket模拟客户端和服务端(多线程)

    1:Socket与ServerSocket的交互 2.Socket和ServerSocket介绍 Socket 构造函数 Socket() Socket(InetAddress address, in ...

  2. java网络编程Socket实现客户端向服务端发送信息

    (可按目录按需阅读,我一般会整理的比较细) 前置知识 java IO Socket 什么是socket?socket字面意思其实就是一个插口或者套接字,包含了源ip地址.源端口.目的ip地址和源端口. ...

  3. php winform通信,C# Winform 通过Socket实现客户端和服务端TCP通信

    操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...

  4. 基于Socket实现客户端与服务端通讯

    基于Socket实现客户端与服务端通讯 socket 概述 Socket,套接字就是两台主机之间逻辑连接的端点.TCP/IP协议是传输层协议,主要解决数据如何 在网络中传输,而HTTP是应用层协议,主 ...

  5. php socket 握手,python Socket之客户端和服务端握手详细介绍

    这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...

  6. Java中使用Jedis连接Redis服务端时提示:JedisConnectionException: Failed connecting

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  7. php cannot bind port to socket,PHP基于socket实现客户端和服务端通讯功能

    本文主要介绍了PHP基于socket实现的简单客户端和服务端通讯功能,可实现服务端接收客户端发送的字符串进行翻转操作后返回客户端的功能,需要的朋友可以参考下 服务端: set_time_limit(0 ...

  8. C#中面向连接的客户端与服务端编程

    1)         流程 2)         服务端程序特点 Ø 一般启动后就一直处于运行状态,以等待客户端进程的请求 Ø 使用的端口往往是熟知端口,便于客户机进程连接请求 Ø 一般拥有较多的系统 ...

  9. socket模拟客户端和服务端

    思路:客户端先接收键盘的数据,变为输出流再转化为打印流,安行发送,接收来自服务端的数据,按行读取,最后关闭输入输出,释放资源 服务端按行接收数据,进行处理,变为输出流再转化为打印流,安行发送,最后关闭 ...

最新文章

  1. redis未能启动服务器,redis服务启动不了的解决办法(服务器应非法关机了)
  2. FCKeditor.Net 2.6.3 配置说明与文件精简
  3. ORB-SLAM(四)追踪
  4. 详解JSONObject.parseObject和JSONObject.fromObject——Web网络系列学习笔记
  5. 用计算机打字英语单词,常用计算机专业英语词汇-前401-500单词
  6. html如何让框架的边框消失,css如何让边框透明?
  7. 32张感恩海报!武汉市文化和旅游局这波操作太可以了
  8. 使用Acronis Disk Director Suite调整分区大小
  9. rtorrent -- PT机的下载利器
  10. 电够动力足——认识主板上的CPU供电模块
  11. android cardview,安卓 CardView 妙用
  12. excel高级筛选怎么用_关于Excel中“高级筛选”的这些技巧,必须掌握!
  13. ajax提交表单序列化不进请求,表单序列化+ajax跨域提交
  14. 深入理解地址翻译 CSAPP
  15. 电机世界之直流有刷电机(科普文)
  16. 速卖通如何避免差评?
  17. 从2-3树理解红黑树
  18. C# Winform添加背景图片后加载的时候控件卡
  19. 计算机数据表示和运算
  20. 《viva la vida》 歌词

热门文章

  1. 北师大珠海分校2016国庆欢乐赛题解
  2. carsim-simulink联合仿真,ACC自动巡航跟随。 在simulink搭建控制策略,上下层分层控制
  3. MES系统如何帮助工厂实现无纸化生产?
  4. android qmui简书,QMUI 2 终于来了
  5. 安装和卸载CentOS7图形界面
  6. caffe训练网络不收敛——有哪些坑需要我们去填
  7. 布隆过滤器 Guava布隆过滤器的使用
  8. Ogre下的OpenVR开发(1)---Openvr的缺陷
  9. 【机器人】多传感器融合定位前沿技术小笔记
  10. Spring Data 什么是Spring Data 理解