展开全部

客户端:

import java.io.*;

import java.net.*;

import java.awt.*;

import java.awt.event.*;

public class ChatClient extends Frame

{

TextArea ta = new TextArea();

TextField tf = new TextField();

public void launchFrame() throws Exception

{

this.add(ta, BorderLayout.CENTER);

this.add(tf, BorderLayout.SOUTH);

tf.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent ae)

{

try {

String sSend = tf.getText();

if(sSend.trim().length() == 0) return;

ChatClient.this.send(sSend);

tf.setText("");

ta.append(sSend + "\n");

}

catch (Exception e)

}

}

);

this.addWindowListener(

new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

);

setBounds(300,300,300,400);

setVisible(true);

tf.requestFocus();

}

Socket s = null;

public ChatClient() throws Exception

{

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

launchFrame();

(new Thread(new ReceiveThread())).start();

}

public void send(String str) throws Exception

{

DataOutputStream dos = new DataOutputStream(s.getOutputStream());

dos.writeUTF(str);

}

public void disconnect() throws Exception

{

s.close();

}

public static void main(String[] args) throws Exception

{

BufferedReader br = new BufferedReader (

new InputStreamReader(System.in));

ChatClient cc = new ChatClient();

String str = br.readLine();

while(str !e68a843231313335323631343130323136353331333264623165= null && str.length() != 0)

{

cc.send(str);

str = br.readLine();

}

cc.disconnect();

}

class ReceiveThread implements Runnable

{

public void run()

{

if(s == null) return;

try {

DataInputStream dis = new DataInputStream(s.getInputStream());

String str = dis.readUTF();

while (str != null && str.length() != 0)

{

//System.out.println(str);

ChatClient.this.ta.append(str + "\n");

str = dis.readUTF();

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

}

服务器:

import java.net.*;

import java.util.*;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

public class ChatServer extends Frame

{

TextArea ta = new TextArea();

public void launchFrame()

{

add(ta, BorderLayout.CENTER);

setBounds(0,0,200,300);

this.addWindowListener(

new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

);

setVisible(true);

}

ServerSocket server = null;

Collection cClient = new ArrayList();

public ChatServer(int port) throws Exception

{

server = new ServerSocket(port);

launchFrame();

}

public void startServer() throws Exception

{

while(true)

{

Socket s = server.accept();

cClient.add( new ClientConn(s) );

ta.append("NEW-CLIENT " + s.getInetAddress() + ":" + s.getPort());

ta.append("\n" + "CLIENTS-COUNT: " + cClient.size() + "\n\n");

}

}

class ClientConn implements Runnable

{

Socket s = null;

public ClientConn(Socket s)

{

this.s = s;

(new Thread(this)).start();

}

public void send(String str) throws IOException

{

DataOutputStream dos = new DataOutputStream(s.getOutputStream());

dos.writeUTF(str);

}

public void dispose()

{

try {

if (s != null) s.close();

cClient.remove(this);

ta.append("A client out! \n");

ta.append("CLIENT-COUNT: " + cClient.size() + "\n\n");

}

catch (Exception e)

{

e.printStackTrace();

}

}

public void run()

{

try {

DataInputStream dis = new DataInputStream(s.getInputStream());

String str = dis.readUTF();

while(str != null && str.length() !=0)

{

System.out.println(str);

for(Iterator it = cClient.iterator(); it.hasNext(); )

{

ClientConn cc = (ClientConn)it.next();

if(this != cc)

{

cc.send(str);

}

}

str = dis.readUTF();

//send(str);

}

this.dispose();

}

catch (Exception e)

{

System.out.println("client quit");

this.dispose();

}

}

}

public static void main(String[] args) throws Exception

{

ChatServer cs = new ChatServer(8888);

cs.startServer();

}

}

(来自BJSXT)

本回答由提问者推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 斗地主桌号_求用java编写的斗地主程序就,要求可以在局域网内实现两桌以上同时玩。...相关推荐

  1. java火柴游戏_求一个“JAVA拿火柴小游戏”的程序要求如下!!!!!!!跪求!!!!!...

    展开全部 按照题目要求,人拿完火柴后计62616964757a686964616fe58685e5aeb931333332643930算机自动拿火柴,判断胜利者.鼠标点击ok或者键盘按enter键即可 ...

  2. 单机版斗地主游戏源代码,纯JS编写的斗地主单机版小游戏源代码

    单机版斗地主游戏源代码,纯JS编写的斗地主单机版小游戏源代码,下载游戏后,直接运行index.html即可. 完整代码下载地址:单机版斗地主游戏源代码 index.html <!DOCTYPE ...

  3. 编写一个布雷程序,在一个10*10的范围内随机布5-10颗雷,显示结果

    //编写一个布雷程序,在一个10*10的范围内随机布5-10颗雷,显示结果 //假设有雷为9,无雷为0,附近有雷则显示有雷的数量 #include"stdio.h" #includ ...

  4. java 安装包_手机也可以编写Java程序代码?这些黑科技你值得拥有!

    你是不是也很好奇酷炫的程序是如何运行,代码是如何实现的? 接下来就是见证奇迹的时刻,教你如何利用手机端写Java,详细步骤已上线! 第一步 在应用市场或者浏览器搜索AIDE,点击安装/下载. 第二步 ...

  5. 推荐的Java项目_求点Java项目推荐?

    JAVA优秀的开源项目 Java的学习路线:自学java,学多久可以自己找到工作?_didiao java的博客-CSDN博客​blog.csdn.net啊强啊:java一条龙学习(附练习题,视频,项 ...

  6. java 异常机制_深入理解Java异常处理机制

    一.引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中 ...

  7. java 02-cf_cf活动如何设置java环境变量_如何设置java环境变量

    cf助手怎么连接wifi_连接无线网设置 对于刚刚学习java的win7用户来说,首先要学会安装jdk和配置java环境变量,这是学习java的唯一途径,否则编写的代码运行时会出现bug.关于这一点, ...

  8. c++和java哪个难_前端和Java开发哪个难?哪个学习容易一点?

    首先我说一下Java和web两者的区别: Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. ...

  9. java for 死循环_简单的java死循环 java中的死循环问题

    java中死循环是什么意思 循环一次不再循环是死循环java中死循环是什么意思 循环一次不再循环是死循环 还是不断循环才是死JAVA中死循环的意思是,不停地循环,不会终止,例如: for (int i ...

最新文章

  1. 浪潮小机装oracle数据库,浪潮ERP系统oracle双机热备安装文档 | 浪潮888博客
  2. Spring Cloud Feign的文件上传实现
  3. 建立低成本的安全运营中心
  4. MySQL count函数的具体介绍
  5. IT领域中混合云管理工具扮演什么角色?
  6. java 有穷自动机_Java实现雪花算法(snowflake)
  7. C/C++头文件一览表
  8. PHP调整图片饱和度,window_Win10系统电脑屏幕的饱和度如何调整?,什么是饱和度? 对电脑来说 - phpStudy...
  9. win10多合一原版系统_手把手教你制作官方原版的WIN10系统安装盘
  10. [VNC] 远程连接 Xfce4 桌面 tab 键不能自动补全
  11. oracle下查询的sql已经超出IIS响应时间
  12. Qt_编辑器配色方案
  13. Delphi 2010
  14. 路径规划与优化学习系列(一)---路径规划算法
  15. VS2010闪退的问题
  16. 计算机专业英语词汇缩写CIA,CIA英文词汇缩写
  17. photoshop ps2022软件下载
  18. 用Racket做一个拼图游戏-01
  19. [YOLOv7]基于YOLOv7的反光衣检测系统(源码&部署教程&数据集)
  20. Calendar根据日期获取年份和周、当前周的所有日期

热门文章

  1. Report_报表中Ref Cursor数据源的概念和用法(案例)
  2. Rexsee API介绍:Android传感器系列之 - 磁场传感器Magnetic Field源码
  3. java基础学习整理(一)
  4. 混合云计算应用中小企业市场前景看好
  5. MSTP和MPLS专线有什么区别?——Vecloud
  6. 条件随机场CRF HMM,MEMM的区别
  7. Vue使用watch监听一个对象中的属性
  8. springmvc的初始化参数绑定
  9. GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法
  10. php分享十五:php的数据库操作