java学习之利用TCP实现的简单聊天示例代码

 更新时间:2017年12月25日 11:41:26   作者:猿上生活  
这篇文章主要给大家介绍了关于java学习笔记之利用TCP实现的简单聊天的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

TCP

TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。

TCP通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。

本文主要介绍了java利用TCP实现简单聊天的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

示例代码

使用tcp协议实现的简单聊天功能(非常简单的)

思想:使用2个线程,一个线程是用来接收消息的,另一个线程是用来发消息的。

客户端Demo代码:

public class SendDemo {
 public static void main(String[] args) throws Exception{
 Socket socket= new Socket(InetAddress.getLocalHost(),8888);
 SendImpl sendImpl= new SendImpl(socket);
 //发送的线程
 new Thread(sendImpl).start();
 //接收的线程
 ReciveImpl reciveImpl=new ReciveImpl(socket);
 new Thread(reciveImpl).start();
 }
}

服务器端Demo代码:

public class ServerDemo {
 public static void main(String[] args) throws Exception {
 ServerSocket serverSocket =new ServerSocket(8888);
 Socket socket=serverSocket.accept();
 SendImpl sendImpl= new SendImpl(socket);
 new Thread(sendImpl).start();
 ReciveImpl reciveImpl=new ReciveImpl(socket);
 new Thread(reciveImpl).start();
 }
}

发送线程的Demo代码:

public class SendImpl implements Runnable{
 private Socket socket;
 public SendImpl(Socket socket) {
 this.socket=socket;
 // TODO Auto-generated constructor stub
 }
 @Override
 public void run() {
 Scanner scanner=new Scanner(System.in);
 while(true){
  try {
  OutputStream outputStream = socket.getOutputStream();
  String string= scanner.nextLine();
  outputStream.write(string.getBytes());
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 }
 }
}

接收线程的Demo代码:

public class ReciveImpl implements Runnable {
 private Socket socket;
 public ReciveImpl(Socket socket) {
 this.socket=socket;
 // TODO Auto-generated constructor stub
 }
 @Override
 public void run() {
 while(true ){
  try {
  InputStream inputStream = socket.getInputStream();
  byte[] b=new byte[1024];
  int len= inputStream.read(b);
  System.out.println("收到消息:"+new String(b,0,len));
  
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 }
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • SpringCloud 如何提取公共配置

    SpringCloud 如何提取公共配置

    这篇文章主要介绍了SpringCloud 提取公共配置的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 详解Java线程堆栈

    详解Java线程堆栈

    本篇文章主要给大家讲了Java线程堆栈的详细原理以及用法,需要的朋友跟着学习下吧。
    2017-12-12
  • springboot+WebMagic+MyBatis爬虫框架的使用

    springboot+WebMagic+MyBatis爬虫框架的使用

    本文是对spring boot+WebMagic+MyBatis做了整合,使用WebMagic爬取数据,然后通过MyBatis持久化爬取的数据到mysql数据库。具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • java中获取xml文件的某个配置节点内容方式

    java中获取xml文件的某个配置节点内容方式

    这篇文章主要介绍了java中获取xml文件的某个配置节点内容方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • idea项目打开后出现橙色的时钟图标的解决

    idea项目打开后出现橙色的时钟图标的解决

    本文主要介绍了idea项目打开后出现橙色的时钟图标的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • springboot整合Quartz实现动态配置定时任务的方法

    springboot整合Quartz实现动态配置定时任务的方法

    本篇文章主要介绍了springboot整合Quartz实现动态配置定时任务的方法,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • JAVA中的引用与对象详解

    JAVA中的引用与对象详解

    本文主要介绍了JAVA中引用与对象的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 解决Spring使用@MapperScan问题

    解决Spring使用@MapperScan问题

    这篇文章主要介绍了解决Spring使用@MapperScan问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Flowable 设置任务处理人的四种方式详解

    Flowable 设置任务处理人的四种方式详解

    这篇文章主要为大家介绍了Flowable 设置任务处理人的四种方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java中实现List分隔成子List详解

    Java中实现List分隔成子List详解

    大家好,本篇文章主要讲的是Java中实现List分隔成子List详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论