Java聊天系统

1.Socket类

Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。 Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。 Socket(String host, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。 close()
关闭此套接字。 connect(SocketAddress endpoint)
将此套接字连接到服务器。 connect(SocketAddress endpoint, int timeout)
将此套接字连接到服务器,并指定一个超时值。 getInetAddress()
返回套接字连接的地址。 getInputStream()
返回此套接字的输入流。 getLocalPort()
返回此套接字绑定到的本地端口。 getOutputStream()
返回此套接字的输出流。 getPort()
返回此套接字连接到的远程端口。

2.ServerSocket类

ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
accept()
侦听并接受到此套接字的连接。
getInetAddress()
返回此服务器套接字的本地地址。 Socket编程步骤
服务器端创建ServerSocket对象,调用accept方法返回Socket对象
客户端创建Socket对象,通过端口连接到服务器
客户端、服务器端都使用Socket中的getInputStream方法和getOutputStream方法获得输入流和输出流,进一步进行数据读写操作 (InetAddress用来描述主机地址;
Socket用来创建两台主机之间的连接;
ServerSocket用来侦听来自客户端的请求;
Socket通常称作“套接字”,通常通过“套接字”向网络发出请求或者应答网络请求。)

3.实现的步骤:

   第一步: ChatUtil工具类:把一些常用的常量放进来

    第二步:Server开启服务
第三步:ClientSocket连接服务器的socket
第四步:CHatFrame(添加两个属性(name,sex))2.添加了getSocket方法
第五步:LoginFrame设置了默认值 处理性别获得socket对象
package com.lanqiao.demo2;
/**
* 工具类
* @author qichunlin
*
*/
public final class ChatUtil {
//地址
public static final String ADDRESS = "localhost";
//端口
public static final int PORT = 9999;
}
package com.lanqiao.demo2;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; /**
* 服务端类
* @author qichunlin
*/
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(ChatUtil.PORT);
int count = 0;
while (true) {
System.out.println("等待客户端连接.......");
Socket socket = ss.accept();
count++;
System.out.println("目前有"+count+"个客户端进入了聊天室");
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.lanqiao.demo2;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException; /**
* 客户端的socket
* @author qichunlin
*
*/
public class ClientSocket {
public static Socket socket;
public ClientSocket() {
try {
socket = new Socket(ChatUtil.ADDRESS, ChatUtil.PORT);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.lanqiao.demo2;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException; import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField; /**
* 聊天系统的登录界面
* @authorqichunlin
*
*/
public class LoginFrame extends JFrame implements ActionListener{
//定义组件
JLabel userLab,addrLab,portLab;//标签
JTextField userText,addrText,portText;//文本框
JRadioButton radioMan,radioWoman,radioser;//单选按钮
ButtonGroup group ;//组
JButton connectBut,closeBut;//按钮
//容器
JPanel p1,p2,p3; public LoginFrame(){
//实例化组件
p1 = new JPanel();
p1.setLayout(new FlowLayout(FlowLayout.LEFT)); userLab = new JLabel("姓名:");
userText = new JTextField(10);
radioMan = new JRadioButton("男");
radioMan.setSelected(true);
radioWoman = new JRadioButton("女");
radioser = new JRadioButton("保密");
//把单选按钮,添加到组中
group = new ButtonGroup();
group.add(radioMan);
group.add(radioWoman);
group.add(radioser); //往p1中,添加组件了(注意:组不需要添加到容器中)
p1.add(userLab);
p1.add(userText);
p1.add(radioMan);
p1.add(radioWoman);
p1.add(radioser); p2 = new JPanel();
p2.setLayout(new FlowLayout(FlowLayout.LEFT));
addrLab = new JLabel("地址:"); addrText = new JTextField(10);
addrText.setText(ChatUtil.ADDRESS); portLab = new JLabel("端口:");
portText = new JTextField(10);
portText.setText(ChatUtil.PORT+""); //把组件添加到p2中
p2.add(addrLab);
p2.add(addrText);
p2.add(portLab);
p2.add(portText); p3 = new JPanel();
p3.setLayout(new FlowLayout(FlowLayout.CENTER)); connectBut =new JButton("连接");
//绑定事件【点击事件】
connectBut.addActionListener(this); closeBut = new JButton("断开");
//把组件添加到p3中
p3.add(connectBut);
p3.add(closeBut); //设置面板的布局模式(流式布局)
this.getContentPane().setLayout(new GridLayout(3,1));//网格布局 //把组件添加到面板了
//1、获取面板
Container c = this.getContentPane();
//把p1容器添加到面板
c.add(p1);
//把p2容器添加到面板
c.add(p2);
//把p3容器添加到面板
c.add(p3); init();
}
/**
* 初始化窗体的基本信息
*/
public void init(){
//1、标题
this.setTitle("登录界面");
//2、大小
this.setSize(350,200);
//3、关闭放大功能
this.setResizable(false);
//4、位置
this.setLocationRelativeTo(null);
//5、是否显示
this.setVisible(true);
//6、关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new LoginFrame();
}
//点击事件的处理过程
@Override
public void actionPerformed(ActionEvent e) {
//处理选择中的性别
String sex = "";
if(radioWoman.isSelected()) {
sex = "女";
}else if(radioMan.isSelected()) {
sex = "男";
}else {
sex = "保密";
}
System.out.println("============");
//1、隐藏当前的界面【登录界面】
this.setVisible(false);
//2、显示聊天的界面
ChatFrame c = new ChatFrame(userText.getText(),sex);//登录名传递过来
c.getSocket();
}
}

package com.lanqiao.demo2; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; /**
* 服务端类
* @author qichunlin
*/
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(ChatUtil.PORT);
int count = 0;
while (true) {
System.out.println("等待客户端连接.......");
Socket socket = ss.accept();
count++;
System.out.println("目前有"+count+"个客户端进入了聊天室");
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

2018.4.28 基于java的聊天系统(带完善)的更多相关文章

  1. 完全基于 Java 的开源深度学习平台,亚马逊的大佬带你上手

    本文适合有 Java 基础的人群 作者:DJL-Lanking HelloGitHub 推出的<讲解开源项目>系列.有幸邀请到了亚马逊 + Apache 的工程师:Lanking( htt ...

  2. Jenkins日常运维笔记-重启数据覆盖问题、迁移、基于java代码发版(maven构建)

    之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节:1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中.如jenkins使 ...

  3. 2018面向对象程序设计(Java)第15周学习指导及要求

    2018面向对象程序设计(Java)第15周学习指导及要求 (2018.12.6-2018.12.9)   学习目标 (1) 掌握Java应用程序打包操作: (2) 了解应用程序存储配置信息的两种方法 ...

  4. 2018面向对象程序设计(Java)第9周学习指导及要求

    2018面向对象程序设计(Java)第9周学习指导及要求(2018.10.25-2018.10.28)   学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...

  5. 基于Java 生产者消费者模式(详细分析)

    Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...

  6. 基于Java Mina框架的部标jt808服务器设计和开发

    在开发部标GPS平台中,部标jt808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言.需要购买jt808GPS服务器源码 ...

  7. 搭建基于java环境

    .net项目架构改造之搭建基于java环境配置一览[上]   最近公司做了一个项目,需要嵌套在千牛的客户端上,项目代码必须上阿里的聚石塔,全程采用基于docker的自动化部署,我们的项目是基于.net ...

  8. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  9. 基于Java的打包jar、war、ear包的作用与区别详解

      本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下   以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...

随机推荐

  1. 安装pywin32时,出现找不到python27注册信息的解决办法

    1. 检查一下注册表是否存在python其它版本的信息 方法: 1)在命令行中输入regedit打开注册表 2)在HKEY_CURRENT_USER\Software中找一下是否存在python注册信 ...

  2. 数据库路由中间件MyCat - 使用篇(2)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 基本概念 3. 分片 3.1 分片节点(dataNode) 表被水平切分后,每个分片表所在的数据库就是一个分 ...

  3. UE4中资源加载资源的方式

    在UNITY中,我们加载资源一般是通过Resources.Load(path).即可完成.该方法返回的是Object类型.如果你想要的是材质或者贴图等等,只要价格类型转换的关键字就可以了例如 as M ...

  4. Java基础--常用API--字符串相关API

    一.java.lang.String 1.string对象不可变,被final修饰,不能被继承. 2.赋值方式: (1)直接赋值.比如: String name = "rick"; ...

  5. vue 开发笔记

    vue 开发记录 marked 插件的使用 import marked from "marked"; import hljs from "highlight.js&quo ...

  6. 查询索引range失效

    在某一个时间字段加索引,短的时间范围内查询,索引生效,为range.长时间范围,索引失效,查全表. 当索引查的数据量超过全表30%的数据,索引失效,会查全表.

  7. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  8. @Slf4j注解的使用

    项目中使用Slf4j日志: private static final Logger log=LoggerFactory.getLogger(TestMain.class); 使用@Slf4j以后,默认 ...

  9. shell下批量除去文件名中的空格

    rename 's/ /_/g' * 上述命令可以将当前文件夹内所有文件的名字中得所有空格替换为_.其中g代表所有,如果不加g,如果文件名字中有多个空格,仅替换第一个.

  10. 企业级Web Nginx 服务优化

    企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C% ...