java学习笔记之TCP实现的简单聊天

简单聊天Demo

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

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

  客户端Demo代码:

 1 public class SendDemo {
 2     public static void main(String[] args) throws Exception{
 3         Socket socket= new Socket(InetAddress.getLocalHost(),8888);
 4         SendImpl  sendImpl= new SendImpl(socket);
 5         //发送的线程
 6         new Thread(sendImpl).start();
 7         //接收的线程
 8         ReciveImpl reciveImpl=new ReciveImpl(socket);
 9         new Thread(reciveImpl).start();
10     }
11
12 }

  服务器端Demo代码:

 1 public class ServerDemo {
 2     public static void main(String[] args) throws Exception {
 3         ServerSocket serverSocket =new ServerSocket(8888);
 4         Socket socket=serverSocket.accept();
 5         SendImpl sendImpl= new SendImpl(socket);
 6         new Thread(sendImpl).start();
 7         ReciveImpl reciveImpl=new ReciveImpl(socket);
 8         new Thread(reciveImpl).start();
 9     }
10
11 }

  发送线程的Demo代码:

 1 public class SendImpl implements Runnable{
 2     private Socket socket;
 3     public SendImpl(Socket socket) {
 4         this.socket=socket;
 5         // TODO Auto-generated constructor stub
 6     }
 7     @Override
 8     public void run() {
 9         Scanner scanner=new Scanner(System.in);
10         while(true){
11             try {
12                 OutputStream outputStream = socket.getOutputStream();
13                 String  string= scanner.nextLine();
14                 outputStream.write(string.getBytes());
15             } catch (IOException e) {
16                 // TODO Auto-generated catch block
17                 e.printStackTrace();
18             }
19         }
20     }
21
22 }

  接收线程的Demo代码:

 1 public class ReciveImpl implements Runnable {
 2     private Socket socket;
 3     public ReciveImpl(Socket socket) {
 4         this.socket=socket;
 5         // TODO Auto-generated constructor stub
 6     }
 7     @Override
 8     public void run() {
 9         while(true ){
10             try {
11                 InputStream inputStream = socket.getInputStream();
12                 byte[] b=new byte[1024];
13                 int len= inputStream.read(b);
14                 System.out.println("收到消息:"+new String(b,0,len));
15
16             } catch (IOException e) {
17                 // TODO Auto-generated catch block
18                 e.printStackTrace();
19             }
20         }
21     }
22
23 }
时间: 2024-11-13 08:57:27

java学习笔记之TCP实现的简单聊天的相关文章

【Java学习笔记】如何写一个简单的Web Service

本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web Developers Java SE 6 Windows XP 2.基本环境搭建: 1)Java SE6 JDK的安装:下载Java SE6 JDK,双击,安装默认选项进行安装即可. 2)Eclipse的安装与配置: 安装时直接解压.     配置处有两点,Window>Preferences>Jav

Java学习笔记 11/15:一个简单的JAVA例子

首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java // TestJava.java,java 的简单范例 public class TestJava { public static void main(String args[]) { int num ; // 声明一个整型变量 num num = 3 ; // 将整型变量赋值为 3 // 输出字符串,这里用"+" 号连接变量 System.out.printl

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

Java学习笔记之接口

一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(String msg); } 定义接口使用关键字interface 修饰符interface前面的public可以省略,如果省略,则采用默认访问控制,即只有在相同包结构的代码才可以访问此接口 接口不可以有构造方法(区别于类中的构造方法) 接口里面的所有成员,包括常量.方法等都是public访问权限,所以在

[Java学习笔记]对象克隆

对象克隆: 浅克隆: 被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象 深克隆: 被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象 Java中实现克隆: Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法 查看Java源代码发现Object中

java学习笔记16--异常

java学习笔记16--异常 异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失, 所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行. 异常类的继承结构 在整个java的异常结构中,实际上有以下两个最常用的类:Exception.Error,这两个类全都是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理. Error:一般指