使用Socket实现通信聊天室
使用Socket实现通信聊天室
通信聊天室是一个比较酷的项目。
建立通信聊天室之前我们会想到这些问题:
①聊天室得要有一个发送窗口和一个接受窗口,如何在这两个窗口建立联系?
②如何发送信息并且接受信息呢?
经过学习,我知道了使用JAVA中的Socket(客户端)和ServerSocket(服务器)两个API能够连接两个窗口。发送和接受的信息也可以通过获取服务器和客户端的输入输出流来实现。
接下来就好办多了。我们现在就只需要创建两个窗口,然后用Socket和ServerSocket将两个窗口连接,之后再将客户端输入的数据发送到服务器端并且显示出来就行。
关键点已经实现,再继续写下去就是考验基本功了。基本的窗体搭建和面向对象的程序设计思维。
话不多说,开始写代码!
首先我们先写一个普通的服务器端:
package comV1.comServletV1;import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;//服务器端显示窗口
public class TextServlet {private String s;public void init(){//创建一个带有JText能显示文字的的窗口JFrame jf=new JFrame("服务器");jf.setSize(500,500);jf.setLayout(new BorderLayout());JLabel label=new JLabel("13213213");JTextField textField=new JTextField("接收文字",30);Dimension d=new Dimension(50,100);textField.setPreferredSize(d);textField.add(label); JPanel jp=new JPanel();jp.add(textField);jf.add(jp,BorderLayout.NORTH);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setVisible(true);//窗口设置好了,接下来将这个窗口变成服务器,使用ServerSockettry {//创建服务器,设置服务器端口ServerSocket ss=new ServerSocket(9999);//通过阻塞,如果客户端连接到了“9999”端口,便连上这个服务器Socket client=ss.accept();System.out.println("客户端成功连接到服务器");//取得客户端的输入输出流InputStream ins=client.getInputStream();OutputStream ous=client.getOutputStream();//取得客户端的文字并且显示在服务器端while(true){int n= ins.read();System.out.println("得到数字"+n);//将得到的消息写入文本框textField.setText(n+"");System.out.println("成功写到服务器");}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args){TextServlet ts=new TextServlet();ts.init();}
}
现在服务器已经搭建好了,启动服务器,我们可以先用PowerShell端连接服务器
因为我们打印了注释,连接上后便会显示成功信息
接着在客户端按下键盘上的任意数值,服务器端的窗口都会显示相应的ASCALL码。
好了,接下来我们继续写一个客户端的窗体
先对连接服务器和发送信息给服务器的方法封装到类Clientnn中
package comV1.comClientV1;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class Clientonn {private InputStream ins;private OutputStream ous;/*** @sIP 服务器IP地址* @sPort 服务器端口号* 客户端连接服务器,并且获得客户端的输入输出流*/public boolean connect2Server(String sIP,int sPort){try {Socket client=new Socket(sIP,sPort);ins=client.getInputStream();ous=client.getOutputStream();System.out.println("连接到服务器并且获取到输入输出流");return true;} catch (IOException e) {e.printStackTrace();}return false;}/*** 发送数据给服务器*/public void send2Server(int s){try {this.ous.write(s);} catch (IOException e) {e.printStackTrace();}}
}
然后在主类中创建窗体使用keylistener获取键盘按钮信息,并且调用Clientnn类中连接服务器和发送数据的方法
package comV1.comClientV1;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;//制作客户端界面
public class WritClient {private int send;public void init(){//创建一个带有文字的窗口JFrame jf=new JFrame("客户端");jf.setSize(500,500);jf.setLayout(new BorderLayout());JTextField textField=new JTextField("发送信息:",30);Dimension d=new Dimension(50,100);textField.setPreferredSize(d);JPanel jp=new JPanel();jp.add(textField);jf.add(jp,BorderLayout.NORTH);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Clientonn cn=new Clientonn();if (cn.connect2Server("localhost",9999)){System.out.println("成功连接到服务器");}textField.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {send = e.getKeyChar();System.out.println("触发按钮监听器,得到:"+send);cn.send2Server(send);System.out.println("客户端传送一个数据"+send);}@Overridepublic void keyReleased(KeyEvent e) {}});jf.setVisible(true);}public static void main(String[] args){WritClient wc=new WritClient();wc.init();}
}
运行效果如下,当在客户端的文本框中输入数据时,在服务器的文本框中会得到相应的ASCALL码
用Socket实现了发送和接收数据的功能,但是由于io流只能取得一个byte范围内的int型数据,还只能发送数据。如何能使得发送的数据不失真呢?这是我接下来需要更进一步学习的内容。
使用Socket实现通信聊天室相关推荐
- python socket 网络聊天室_Python基于Socket实现简单聊天室
本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Ti ...
- Java Socket通信—聊天室
Client.java import java.io.*; import java.net.*; import java.util.*; public class Client { public in ...
- C#基于Socket的简单聊天室实践
序:实现一个基于Socket的简易的聊天室,实现的思路如下: 程序的结构:多个客户端+一个服务端,客户端都是向服务端发送消息,然后服务端转发给所有的客户端,这样形成一个简单的聊天室功能. 实现的细节: ...
- socket.io php 聊天室,WebSocket学习(一)——基于socket.io实现简单多人聊天室
前言 什么是Websocket呢? 我们都知道在Http协议中,客户端与服务器端的通信是靠客户端发起请求,然后服务器端收到请求再进行回应,这个过程中,客户端是主动的,服务器端是被动的.Websocke ...
- java socket多人聊天室_如何运用Java socket实现多人聊天室功能
如何运用Java socket实现多人聊天室功能 导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构 ...
- socket.io搭建聊天室
文章目录 1.定义 2.特点 3.实例 1.定义 socket.io是一个可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信的库.它建立在websocket之上,且当浏览器不支持web ...
- 项目:畅所欲言聊天室---网页IM通信聊天室
文章目录 项目名称 项目描述 开发环境 设计思路 详细设计 数据库模块设计 安装 mariadb 服务 更改配置 用户信息表设计 使用自己的数据管理模块对数据库的访问 Mysql所需接口 业务处理模块 ...
- Linux下socket多人聊天室
目录 前言 一.聊天室的实验内容 二.逐个功能的简单分析 三.系统功能模块分解图 1.服务端功能模块图 2.客户端功能模块图 3.守护进程功能模块图 四.功能模块流程图 1.服务端流程图 2.客户端流 ...
- Socket+MFC的聊天室
功能简介 私聊,群聊,查看在线好友,文件导入,日志导出 (MFC+Socket) 运行环境 vs2019 项目截图 服务器端 客户端 重要代码 服务器 开启.关闭服务器 void CServerDlg ...
最新文章
- java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程
- 知识图谱(四)——实体识别和扩展
- 什么?原来C#还有这两个关键字
- python递归实现_Python-递归实现
- 关于PHP的工作流引擎
- android 崩溃原因,Android SurfaceView常见崩溃的原因以及解决办法
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用...
- 网络安装ubuntu操作系统
- 迅通雾霾处理技术为清晰都市保驾护航
- NGOD client 完成感想
- 阿里架构师墙裂推荐Java岗实战文档:Spring全家桶+Docker+Redis
- CCKS2019总结
- word论文删除封面或前几页的页眉或横线
- mac系统的alt+tab(切换程序)键是什么
- Unity载入骨骼动画详解
- CentOS只读文件系统
- 电商老大的短腿——阿里巴巴曲折的游戏之路
- 多张图片怎么统一修改尺寸?
- echarts.js?1be7:2178 There is a chart instance already initialized on the dom. echats图表报错
- 国科大学习资料--模式识别与机器学习(黄庆明)--2017期末考试题(含答案)
热门文章
- python2 python3选择哪个_python2和python3哪个使用率高
- TIA博途_通过Variant操作数组实现华氏度数据批量转换成摄氏度的具体方法
- Unreal5 第三人称射击游戏 角色基础制作1
- java自定义校验注解
- Java实习生工作总结(二)
- 干货 | 携程移动直播探索
- iOS日历、日期、时间的计算
- 利用语音Modem实现电话点播和留言功能
- python用turtle画太阳花_Python绘图——认识turtle小海龟
- 安庆师范大学计算机与信息学院考研光荣榜,信息工程学院2016级考研考公光荣榜(十)...