public class ChatServer {

    boolean started = false;
ServerSocket serverSocket = null; public void start(){ //DataInputStream inputStream = null;
try {
serverSocket = new ServerSocket(8888); }catch(BindException e){
System.out.println("端口被占用");
System.exit(0);
}catch(IOException e){
e.printStackTrace(); }
try {
started = true;
while(started){
Socket socket = serverSocket.accept();
Client c = new Client(socket);
new Thread(c).start();
}
}catch (IOException e) { }finally{
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
} } class Client implements Runnable{ private DataInputStream inputStream = null;
private Socket socket = null; private boolean connect = false; public Client(Socket socket) {
this.socket = socket;
connect = true;
try {
inputStream = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
} public void run() {
try {
while(connect){
String str = inputStream.readUTF();
System.out.println("客户端发送--->"+str);
}
}catch (EOFException e){
//客户端关闭
}catch (IOException e) { }finally{
try {
if(inputStream!=null)inputStream.close();
//客户端掉线,或关闭了
if(socket!=null)socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
} public static void main(String[] args) {
ChatServer chatServer = new ChatServer();
chatServer.start(); } }
public class ChatClient extends Frame{

    private static final long serialVersionUID = 287499141806289407L;

    TextField textField = new TextField();

    TextArea textArea = new TextArea();

    Socket socket = null;

    DataOutputStream outputStream = null;

    public void launchFrame(){

        setSize(300, 300);
setLocationRelativeTo(null);
add(textArea, BorderLayout.NORTH);
add(textField,BorderLayout.SOUTH);
pack();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
disconnect();
System.exit(0);
} }); textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//TextField field = (TextField)e.getSource();
String text = textField.getText();
textArea.setText(text);
textField.setText("");
try {
outputStream.writeUTF(text);
outputStream.flush();
//outputStream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
//System.out.println("文本框输入"+field.getText());
}
}); setVisible(true);
connect();
} public void connect(){
try {
socket = new Socket("localhost", 8888);
outputStream = new DataOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public void disconnect(){
try {
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} } public static void main(String[] args) { ChatClient client = new ChatClient();
client.launchFrame(); } }

awt多线程聊天的更多相关文章

  1. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  2. TCP多线程聊天室

    TCP协议,一个服务器(ServerSocket)只服务于一个客户端(Socket),那么可以通过ServerSocket+Thread的方式,实现一个服务器服务于多个客户端. 多线程服务器实现原理— ...

  3. 【Python网络编程】多线程聊天软件程序

    课程设计的时候制作的多线程聊天软件程序 基于python3.4.3 import socket import pickle import threading import tkinter import ...

  4. 【C++】基于socket的多线程聊天室(控制台版)

    以前学习socket网络编程和多线程编程的时候写的一个练手程序 聊天室基本功能: 1.用户管理:登录,注册,登出,修改用户名,修改密码 2.聊天室功能:群聊,私聊,获取在线用户列表,获取所有用户列表 ...

  5. 毕向东udp学习笔记3多线程聊天

    项目功能: 实现了多线程下的发送接收,比较好 希望可以加入GUI,类似聊天软件一样,有一个消息输入框,捕获输入消息,作为发送线程 有一个显示消息框,接收消息并显示,作为接收线程 不知道的是,当在线程中 ...

  6. Linux下c++11多线程聊天室

    刚看的c++11多线程,写个聊天室试试编译的时候加上 c++11 和 多线程库g++ -Wall -std=c++0x -pthread -o server server.cppserver 和cli ...

  7. Java Socket 多线程聊天室

    本来这次作业我是想搞个图形界面的,然而现实情况是我把题意理解错了,于是乎失去了最初的兴致,还是把程序变成了功能正确但是“UI”不友好的console了,但是不管怎么样,前期的图形界面的开发还是很有收获 ...

  8. JavaSE简单实现多线程聊天

    1.1 主程序入口 在主程序入口处,通过设置MyWindow的第一个参数,如果为true则为服务器,如果为false,则为客户端,当然也可以设置第二个参数,区分客户端和服务器的窗口标题. public ...

  9. Linux以下基于TCP多线程聊天室(client)

    不怎么会弄这个博客的排版,就直接将代码附上: 主要是使用多线程去等待接受数据和发送数据.以下是client的代码: tcpsed.h文件 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

随机推荐

  1. Why does Delphi XE7 IDE hangs and fails on out of memory exception?

    引自:   https://stackoverflow.com/questions/27701294/why-does-delphi-xe7-ide-hangs-and-fails-on-out-of ...

  2. 突破这个四个阶段年薪没有50W,还好意思说是搞Java的?

    该视频教程总共分为四个阶段来学习.逐步进阶,并且还会不定期更新.我简介一下每一个阶段的视频资源,学习顺序不分先后. 第一阶段 第一阶段主要从 svn/git 版本号控制.Java高并发.JVM虚拟机. ...

  3. Apache与php快速部署web服务

    [本文出自天外归云的博客园] 在一台服务器上临时起个web服务,读取服务器上的cfs文件内容并显示在页面上,做一个简单的web请求处理. 首先找到apache,在conf文件夹下vi httpd.co ...

  4. 安防工程商必须知道的PoE供电真相

    问题一:何为PoE技术? PoE (Power Over Ethernet)指的是在现有的以太网Cat.5布线基础架构不作任何改动的情况下,在为一些基于IP的终端(如IP电话机.无线局域网接入点AP. ...

  5. 类似于c语言读取文件进行解析

    $log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_er ...

  6. 微服务架构的服务与发现-Spring Cloud

    1 为什么需要服务发现 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB.KV,去掉重量级ESB),并且强调DevOps和快 ...

  7. mac下安装mysql5.7.18,连接出现Access denied for user 'root'@'localhost' (using password: YES)

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...

  8. (原)关于ffmpeg使用custom io-context遇到的一些坑

    今天在使用android-as_video_player这个开源的框架来实现自己项目中的一个播放器,中间关于ndk编译ffmpeg遇到的坑,现在想起来,对ndk的心态,现在心里都有一万个cnm在奔腾, ...

  9. SpringBoot系统列 4 - 常用注解、拦截器、异常处理

    在前面代码基础上进行改造: 1.SpringBoot常用注解 @SpringBootApplication :指定SpringBoot项目启动的入口,是一个复合注解,由@Configuration.@ ...

  10. 使用docker安装mysql服务

    使用docker官方镜像安装mysql服务 1 拉取mysql镜像,采用网易加速地址 docker pull hub.c.163.com/library/mysql:5.7 2 重命名镜像名 dock ...