Java 网络编程之 TCP 实现简单的聊天系统

客户端

1、连接服务器 Socket

2、发送消息

package lesson02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 客户端
 */
public class TcpClientDemo1 {

  public static void main(String[] args) {

    Socket socket = null;
    OutputStream os = null;

    try {
      //1、要知道服务器的地址 端口号
      InetAddress serverIP = InetAddress.getByName("127.0.0.1");
      int port = 9999;
      //2、创建一个 socket 连接
      socket = new Socket(serverIP, port);
      //3、发送消息 IO流
      os = socket.getOutputStream();
      os.write("你好,欢迎学习狂神学Java".getBytes());

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (os != null){
        try {
          os.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (socket != null){
        try {
          socket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

}

服务端

1、建立服务的端口 ServerSocket

2、等待用户的连接 accept

3、接收用户的消息

package lesson02;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 */
public class TcpServerDemo1 {

  public static void main(String[] args) {

    ServerSocket serverSocket = null;
    Socket socket = null;
    InputStream is = null;
    ByteArrayOutputStream baos = null;

    try {
      //1、我得有一个地址
      serverSocket = new ServerSocket(9999);

      while (true){
        //2、等待客户端连接过来
        socket = serverSocket.accept();
        //3、读取客户端的消息
        is = socket.getInputStream();

        //管道流
        baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while((len = is.read(buffer)) != -1){
          baos.write(buffer, 0 , len);
        }
        System.out.println(baos.toString());
      }

      /*
      byte[] buffer = new byte[1024];
      int len;
      while ((len = is.read(buffer)) != -1){
        String msg = new String(buffer, 0, len);
        System.out.println(msg);
      }
      */

    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      //关闭资源
      if (baos != null){
        try {
          baos.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (is != null){
        try {
          is.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (socket != null){
        try {
          socket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (serverSocket != null){
        try {
          serverSocket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

}

服务端

1、建立服务的端口 ServerSocket

2、等待用户的连接 accept

3、接收用户的消息

package lesson02;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 */
public class TcpServerDemo1 {

  public static void main(String[] args) {

    ServerSocket serverSocket = null;
    Socket socket = null;
    InputStream is = null;
    ByteArrayOutputStream baos = null;

    try {
      //1、我得有一个地址
      serverSocket = new ServerSocket(9999);

      while (true){
        //2、等待客户端连接过来
        socket = serverSocket.accept();
        //3、读取客户端的消息
        is = socket.getInputStream();

        //管道流
        baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while((len = is.read(buffer)) != -1){
          baos.write(buffer, 0 , len);
        }
        System.out.println(baos.toString());
      }

      /*
      byte[] buffer = new byte[1024];
      int len;
      while ((len = is.read(buffer)) != -1){
        String msg = new String(buffer, 0, len);
        System.out.println(msg);
      }
      */

    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      //关闭资源
      if (baos != null){
        try {
          baos.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (is != null){
        try {
          is.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (socket != null){
        try {
          socket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (serverSocket != null){
        try {
          serverSocket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

}

以上就是Java 网络编程之 TCP 实现简单的聊天系统的详细内容,更多关于Java 实现简单的聊天系统的资料请关注我们其它相关文章!

(0)

相关推荐

  • java基于C/S模式实现聊天程序(客户端)

    经过这几天对java的学习,用java做了这个计算机网络的课程设计,基于C/S模式的简单聊天程序,此篇文章介绍一些客户端的一些东西. 先讲一讲此聊天程序的基本原理,客户端发送消息至服务器,服务器收到消息之后将其转发给连接服务器的所有客户端,来自客户端的消息中包含发件人的名字. 客户端的主要功能是发送消息和接收消息,客户端设置好了端口和服务器地址,并创立客户端自己的套接字,用作和服务器通信的一个标识.布局就不多说了,主要说说监视器和两个重要的线程:发送和接收. 监视器中,登录按钮触发的功能是设置用

  • 基于Java的Socket编写的C/S聊天程序实现

    一个很久以前写的能够支持C/S模式聊天的Demo,利用Java的Socket写的. 只能聊一句就下线,挺low的. 服务器端程序Server import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class TestTcpServer { pub

  • 基于java socket实现 聊天小程序

    服务器 package demo04; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.DataInputStream; import java.io.DataOutp

  • Java使用TCP实现在线聊天的示例代码

    客户端的代码: package tcp.http; import java.io.*; import java.net.*; import java.util.Scanner; public class Client{ public static void main(String[] args) throws IOException{ Scanner scanner=new Scanner(System.in); //1.创建Socket Socket tcpClientSocket=new S

  • java基于C/S结构实现多线程聊天室

    本文实例为大家分享了java基于C/S结构实现多线程聊天室的具体代码,供大家参考,具体内容如下 主要实现的功能: 服务器端建立ServerSocket阻塞监听来自客户端的Socket连接,并为之开辟一个新的线程 读取来自该连接的数据,广播每一个客户端数据,这里简单地使用一个链表保存所有来自客户端的所有Socket连接 客户端连接上服务器端后主要有两个线程在工作: 主线程:不断获取键盘的输入并写入该Socket中传输给服务器 副线程:不断从服务器Socket流中读取传来的数据,打印到屏幕上. 服务

  • java基于C/S模式实现聊天程序(服务器)

    上篇介绍了java基于C/S模式实现聊天程序的客户端写法,这一篇介绍服务器的写法. 服务器的功能是:接收来自客户端的消息,然后将消息转发给当前连接的所有用户.这里一个困扰我许久的地方是如何存储所有用户的地址(套接字),找了许久我找到了一种变长数组的数据结构Vector,用size()来获取长度,用add()来添加元素,这样就容易多了,解决了服务器最大的问题. 服务器我定义了一个启动服务器的按钮,通过此按钮可以启动服务器的监听线程,我把服务器的创建放在了监听线程中. 服务器主要由两个线程组成:监听

  • JAVA Netty实现聊天室+私聊功能的示例代码

    功能介绍 使用Netty框架实现聊天室功能,服务器可监控客户端上下限状态,消息转发.同时实现了点对点私聊功能.技术点我都在代码中做了备注,这里不再重复写了.希望能给想学习netty的同学一点参考. 服务器代码 服务器入口代码 package nio.test.netty.groupChat; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.chann

  • Java NIO实战之聊天室功能详解

    本文实例讲述了Java NIO实战之聊天室功能.分享给大家供大家参考,具体如下: 在工作之余花了两个星期看完了<Java NIO>,总体来说这本书把NIO写的很详细,没有过多的废话,讲的都是重点,只是翻译的中文版看的确实吃力,英文水平太低也没办法,总算也坚持看完了.<Java NIO>这本书的重点在于第四章讲解的"选择器",要理解透还是要反复琢磨推敲:愚钝的我花了大概3天的时间才将NIO的选择器机制理解透并能较熟练的运用,于是便写了这个聊天室程序. 下面直接上代

  • java使用MulticastSocket实现基于广播的多人聊天室

    使用MulticastSocket实现多点广播: (1)DatagramSocket只允许数据报发给指定的目标地址,而MulticastSocket可以将数据报以广播的方式发送到多个客户端. (2)IP协议为多点广播提供了这批特殊的IP地址,这些IP地址的范围是:224.0.0.0至239.255.255.255.. (3)MulticastSocket类时实现多点广播的关键,当MulticastSocket把一个DaragramPocket发送到多点广播的IP地址时,该数据报将会自动广播到加入

  • 基于Java的Socket多客户端Client-Server聊天程序的实现

    任务要求 编写一个简单的Socket多客户端聊天程序: 客户端程序,从控制台输入字符串,发送到服务器端,并将服务器返回的信息显示出来 服务器端程序,从客户机接收数据并打印,同时将从标准输入获取的信息发送给客户机 满足一个服务器可以服务多个客户 低配版本链接 实现代码 工具类 import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket

  • Java SE实现多人聊天室功能

    本文实例为大家分享了Java SE实现多人聊天室功能的具体代码,供大家参考,具体内容如下 实现功能: 1.实现用户注册上线,下线 2.实现群聊和私聊功能 3.实现统计当前在线人数 实现思路: 1.首先,要实现服务端与客户端之间的连接 这里是使用套接字建立TCP连接: (1)服务器端先实例化一个描述服务器端口号的ServerSocket对象 (2)客户端要创建Socket对象来连接指定的服务器端 (3)服务器端调用ServerSocket类的accept()方法来监听连接到服务器端的客户端信息 (

  • java基于netty NIO的简单聊天室的实现

    一.为何要使用netty开发 由于之前已经用Java中的socket写过一版简单的聊天室,这里就不再对聊天室的具体架构进行细致的介绍了,主要关注于使用netty框架重构后带来的改变.对聊天室不了解的同学可以先看下我的博客(<JAVA简单聊天室的实现>) 本篇博客所使用的netty版本为4.1.36,完整工程已上传到Github(https://github.com/Alexlingl/Chatroom),其中lib文件夹下有相应的netty jar包和source包,自行导入即可. 1.为何要

  • Java单线程程序实现实现简单聊天功能

    信息发送 import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class May { public static void main(String[] args) { // 单线程程序 try { ServerSocket socket = new ServerSocket(2233);//端口号 Socket soc = socket.a

随机推荐