服务器端代码:

package chat;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.HashSet;

import java.util.Iterator;

public class sever {

/**

* 服务器端

* @param args

*/

public HashSet clients = new HashSet();

public sever() {

try {

ServerSocket ss = new ServerSocket(8888);

Socket socketaccept = new Socket();

while(true){

socketaccept = ss.accept();

clients.add(socketaccept);

new ServerThread(socketaccept,clients).start();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

class ServerThread extends Thread{

private Socket socketaccept;

private HashSet clients;

public ServerThread(Socket socketaccept, HashSet clients) {

this.socketaccept = socketaccept;

this.clients = clients;

}

@Override

public void run() {

try {

DataInputStream din = new DataInputStream(socketaccept.getInputStream());

while(true){

SendMess(din.readUTF());

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public void SendMess(String readUTF) {

Iterator iter = clients.iterator();

while(iter.hasNext()){

Socket temp = (Socket)iter.next();

try {

DataOutputStream dout = new DataOutputStream(temp.getOutputStream());

dout.writeUTF(readUTF);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public static void main(String[] args){

System.out.println("服务器已启动--");

new sever();

}

}

客户端代码:

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

public class client extends JFrame{

/**

* 客户端

* @param args

*/

private JTextArea jta;

private JTextField jtf;

private JButton jb;

private JLabel name;

private JPanel jp;

private static ThreadReceive trReceive = null;//接收线程

private static Socket sc;

public client(){

this.setSize(300, 350);

this.setTitle("聊天室");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出

jta = new JTextArea(15,20);

jtf = new JTextField(15);

jb = new JButton("发送");

name = new JLabel("");

jp = new JPanel();

jp.setLayout(new FlowLayout());

jp.add(jb);

jp.add(jtf);

jp.add(name);

jb.addActionListener(new SendMess());//发送数据..

this.setLayout(new BorderLayout());

this.add(jta,BorderLayout.CENTER);

this.add(jp,BorderLayout.SOUTH);

getMess();

this.setVisible(true);

}

class ThreadReceive extends Thread{

public void run() {

DataInputStream din;

try {

while(true){

din = new DataInputStream(sc.getInputStream());

jta.append(din.readUTF()+"\n");

//System.out.println("接收数据: "+din.readUTF());

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public void getMess() {

try {

sc = new Socket("127.0.0.1",8888);

trReceive = new ThreadReceive();

trReceive.start();//循环接收数据

//}

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

name.setText(JOptionPane.showInputDialog(this,"请输入你的姓名"));

}//getMess

class SendMess implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd");

String time = format.format(new Date());

try {

// while(true){//发送按钮

DataOutputStream dout = new DataOutputStream(sc.getOutputStream());

dout.writeUTF(time+' '+name.getText()+":"+jtf.getText());

//}

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

public static void main(String[] args){

System.out.println("客户端..");

SwingUtilities.invokeLater(new Runnable() {

public void run() {

client thisClass = new client();

}

});

}

}采用socket编程,这个程序也是为了验证tcp通信可以多对1.  服务器端没有做界面。

java单人多人聊天_java简单多人聊天相关推荐

  1. JAVA网络编程 -UDP篇(简单实现网络聊天)

    通过UDP实现网络聊天 多线程实现UDP网络聊天 1. 编写UDP发送线程UdpSendThread import java.io.BufferedReader; import java.io.IOE ...

  2. java jsp中的日历表_JAVA简单的日历程序

    JAVA简单的日历程序 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 /**以下是日历的代码程序 有疑问 回信 ycj@18e.net **/ //Cale ...

  3. java利用redis实现排行榜_Java简单使用redis-zset实现排行榜

    简单使用redis-zset实现排行榜 此方法实现一个根据某字段的查询次数进行排行,查询的次数越多排行越前(从大到小排序),适用于初学者 1.添加依赖 org.springframework.boot ...

  4. java中怎么引用圆周率_Java简单计算圆周率完整示例

    本文实例讲述了java简单计算圆周率.分享给大家供大家参考,具体如下: 这两天在网上看到一个题,已知pi可以用函数4 * (1 – 1/3 + 1/5 – 1/7 + -) 计算,计算出小数点后五位( ...

  5. java实现分页打印功能_Java简单高效实现分页功能

    今天想说的就是能够在我们操作数据库的时候更简单的更高效的实现,现成的crud接口直接调用,方便快捷,不用再写复杂的sql,带吗简单易懂,话不多说上方法 1.utils.java工具类中的方法 /** ...

  6. java类农夫过河问题_Java简单实现农夫过河问题示例

    本文实例讲述了Java简单实现农夫过河问题.分享给大家供大家参考,具体如下: 一.问题描述 老伯伯要带鱼.狗.猫过河到对岸.,有一条船,只能坐一个人,老伯每次只能带一样动物过河,当老伯不在的时侯狗会咬 ...

  7. JAVA 局域网聊天_java实现简易局域网聊天功能

    本文实例为大家分享了java使用udp模式编写聊天程序的具体代码,供大家参考,具体内容如下 java代码: /* 使用udp模式,编写一个聊天程序 有发送和接收数据2部分, 一个线程接收,一个线程发送 ...

  8. java图形用户登录界面_Java简单登录图形界面

    一.登录界面 1.程序代码 1 import java.awt.*;//导入awt包 2 import javax.swing.*;//导入swing包 3 import java.awt.event ...

  9. 怎么实现java和数据库的链接_JAVA简单链接Oracle数据库,实现注册和登陆的功能

    //User 用户的基本信息,也是USERINFO表中的3个列 package 登陆判断; public class User { private String name; private Strin ...

最新文章

  1. C#实现的18位×××格式验证算法
  2. oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死 解决方法
  3. pmp思维导图 第六版_《每天一小时,两月过PMP》备考指南(附计划表)
  4. 全国大学生电子设计大赛 赛前准备
  5. mysql的groupby原理是啥_mysql数据库groupby报错原理是什么?
  6. 排查指南 | 关于 mPaaS-iOS 小程序打不开问题的解决方案
  7. 【图解分布式架构】看不懂直接面壁
  8. mysql重复数据处理_MySQL 处理重复数据
  9. VMware Fusion下Centos联网
  10. Android 下拉刷新组件SwipeToLoadLayout源码解析
  11. 大连IT产业解析(1布局篇)
  12. 电脑录屏软件帧率设置详解
  13. 自定义控件 仿微信朋友圈文字展开全文功能
  14. SSM整合,非常详细的SSM整合
  15. maya导出带有alpha通道的动画
  16. Python写入Excel格式和颜色
  17. Oracle的查询排序,增加总计列,或者增加总计行
  18. 2.PRT文件的解析
  19. BN,LN,IN,GN的理解和用法
  20. 前世五百次的回眸,才赢得今世的擦肩而过

热门文章

  1. 如何遍历或枚举JavaScript对象?
  2. win11安装软件没反应怎么办 Windows11安装软件没反应的解决方法
  3. ros标准版Action通讯
  4. java只有jre_只安装了jre可以运行java程序吗
  5. qt通过http连接mysql_Qt如何利用MySQL连接远程数据库?
  6. n 的第 k 个因子
  7. 清除浮动(HTML、CSS)
  8. 微信小程序API之getLocal
  9. 微信小程序下载图片保存到本地
  10. JavaScript:堆栈溢出内存泄漏