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. vue: 代码小记

    1.事件派发:子控件->父控件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  2. 好用好玩的Python包

    ujson 用C++实现的json解析器,速度飞快. prettytable 在控制台下使用表格展示数据 import prettytable t=prettytable.PrettyTable([' ...

  3. 中期linux课程考试题

    [口头表达] 1)请描述你了解的磁盘分区的相关知识2)什么是rsync,你有什么生产环境的应用?3)在生产环境中,公司的IDC机房即将超过254台机器,请问你有什么解决方案来规划扩展IDC机房的内网网 ...

  4. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  5. 超简单的okHttpUtils封装(下)

      版权声明:转载请注明出处:http://blog.csdn.net/piaomiao8179 https://blog.csdn.net/piaomiao8179/article/details/ ...

  6. 安卓自己定义View进阶-Path基本操作

    版权声明:本人全部文章均採用 [知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议] 转载前请保证理解此协议,原文出处 :http://www.gcssloop.com/#blog htt ...

  7. 关于XCode工程中PrefixHead.pch文件的使用

    1.首先先清除pch文件在工程中的作用: 存放一些全局的宏(整个项目中都用得上的宏) 用来包含一些全部的头文件(整个项目中都用得上的头文件) 能自动打开或者关闭日志输出功能 2.由于新建的XCode工 ...

  8. James 如何作为服务在后台启动

    james 启动后是在前台运行的,就像你跑一个微服务,前台运行显然不合理,关闭ssh后就会断开,所以我们得配置在后台,使用service配置即可 配置 james/bin 下的phoenix.sh,配 ...

  9. Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理

    Atitit 管理的模式扁平化管理  金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理 1.1. 矩阵管理 1 1.2. 相关信息 矩阵的历史 1 1.3. 基于“ ...

  10. 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24

    [iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...