Java实现单线程聊天室

2023-02-23 0 3,051

本文实例为大家分享了Java实现单线程聊天室的具体代码,供大家参考,具体内容如下

一. Socket API简介

1. Socket编程
Java.net.Socket类代表一个套接字,并且为服务器程序提供了一种来监听客户端并与他们建立连接的一种机制.
套接字使用TCP提供了两台计算机之间的通信机制,客户端创建一个套接字并尝试连接服务器的套接字,当连接建立时,服务器就会创建一个Socket对象,客户端和服务器就可以通过Socket对象的写入和读取来进行通信,这就是聊天室的原理.
两台计算机使用套接字建立TCP连接时会出现以下步骤: 

  • 服务端实例化一个ServerSocket对象,表示通过服务器上的端口通信
  • 服务端调用ServerSocket的accept()方法,该方法将一直等待,直到客户端连接上服务器上给定的端口
  • 服务端正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接
  • Socket类的构造函数试图将客户端连接到指定的服务器和端口号上,如果通信被建立,则在客户端创建一个Socket对象能够与服务端进行通信
  • 在服务端,accept()方法返回服务器上一个新的socket引用,该socket连接到客户端的socket

TCP是一个双向通信协议,连接建立后,通过使用I/O流进行通信,每一个socket都有一个输出流和输入流,客户端的输出流连接到服务端的输入流,服务端的输出流连接到客户端的输入流.

二. 实现单线程模式的聊天室

首先我们来理清整个编程的思路:
socket编程
1.创建项目:
     1.1 服务器模块ServerSocket
     1.2 客户端模块Socket
2. 服务器端
     2.1 创建serverScoket,绑定端口
     2.2 接收客户端连接,Socket
     2.3 通过Socket连接,发送和接收数据
     2.4 关闭ServerSocket/Socket
3. 客户端
     3.1 创建Socket,指定服务器的地址和端口号
     3.2 通过Socket发送和接收数据
     3.3 关闭Socket 
1. 服务端
package single;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
 
/**
 * Author:weiwei
 * description:单线程聊天室服务端
 * Creat:2019/3/8
 **/
public class singleThreadserver {
    public static void main(String[] args) {
 
        try {
 
            //1. 创建服务端ServerSocket,监听6666端口
            ServerSocket serverSocket = new ServerSocket(6666);
            System.out.println(\"服务器启动...\"+serverSocket.
                    getLocalSocketAddress());  //服务器启动,打印当前地址
 
            //2. 接收客户端连接
            Socket socket = serverSocket.accept();  //调用accept()方法
            System.out.println(\"接收到客户端连接...\"+socket.
                    getRemoteSocketAddress());  //接收远程客户端
 
            //3. 接收和发送数据
            //3.1 接收数据
            InputStream inputStream = socket.getInputStream();  //获取字节流
            Scanner scanner = new Scanner(inputStream);   //字节流转字符流
            String message = scanner.nextLine();   //读数据,按行读,读一行
            System.out.println(\"收到客户端的消息:\"+message); //打印接收到的消息
 
            //3.2 发送数据
            OutputStream outputStream = socket.getOutputStream();  //获取字节流
            OutputStreamWriter writer = new OutputStreamWriter(outputStream);//字节流转字符流
            writer.write(\"你好,客户端,我很好.\\n\");  //写数据
            writer.flush();  //刷新(网通信)
 
 
            //4. 关闭
            serverSocket.close();
            System.out.println(\"服务器关闭\");
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 客户端 
package single;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
 
/**
 * Author:weiwei
 * description:单线程聊天室客户端
 * Creat:2019/3/8
 **/
public class singleThreadclient {
    public static void main(String[] args) {
 
        try {
 
            //1. 创建Socket客户端,连接指定服务地址和端口号
            Socket socket = new Socket(\"127.0.0.1\",6666);
            System.out.println(\"客户端创建...\"+socket.
                    getLocalSocketAddress());  //客户端创建,打印当前地址
 
            //2. Socket发送和接收数据
            //2.1 发送数据
            OutputStream outputStream = socket.getOutputStream();  //获取字节流
            OutputStreamWriter writer = new OutputStreamWriter(outputStream);  //字节流转字符流
            writer.write(\"你好,服务器.\\n\");  //写数据
            writer.flush();  //刷新
 
            //2.2 接收数据
            InputStream inputStream = socket.getInputStream();  //获取字节流
            Scanner scanner = new Scanner(inputStream);  //字节流转字符流
            String message = scanner.nextLine();  //读数据,按行读
            System.out.println(\"接收到服务器的消息:\"+message); //打印接收到的数据
 
            //3. 关闭
            socket.close();
            System.out.println(\"客户端关闭\");
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 PHP教程 Java实现单线程聊天室 http://www.20zxx.cn/586361/xuexijiaocheng/qes.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务