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. masonry 基本用法

    一:masonry 基本用法 fistView=[[UIView alloc] init]; fistView.backgroundColor=[UIColor redColor]; [self.vi ...

  2. 读吴恩达算-EM算法笔记

    最近感觉对EM算法有一点遗忘,在表述的时候,还是有一点说不清,于是重新去看了这篇<CS229 Lecture notes>笔记. 于是有了这篇小札. 关于Jensen's inequali ...

  3. 10分钟上手图数据库Neo4j

    随着互联网不断的发展,传统的关系型数据库如oracle,mysql已经难以支撑现下大数据量,高并发的场景了.于是,NoSQL横空出世,有像cassandra这样的column-based,像Mongo ...

  4. 从yield 到yield from再到python协程

    yield 关键字 def fib(): a, b = 0, 1 while 1: yield b a, b = b, a+b yield 是在:PEP 255 -- Simple Generator ...

  5. Atitit 项目版本管理gitflow 与 Forking的对比与使用

    Atitit 项目版本管理gitflow 与 Forking的对比与使用 1.1. 版本管理的历史 csv>>svn >git 1 1.2. gitflow的核心是分版本管理,for ...

  6. XSS测试代码

    无script的Xss <img/src=# onerror=alert('XSS')> HTML5  XSS测试代码 <video> <source onerror=” ...

  7. rm -rf python 实现 v0.1

    #coding=utf- import os def join(arr,join_falg): res = "" for a in arr: res += a+join_falg ...

  8. NPS - 数字化营销 - 净推荐值

    在获客成本高涨的时代,拥有一批超级用户,让企业更有本钱专注在提升产品及体验,创造更多的超级用户,形成良性循环.超级用户究竟要如何创造?超级用户可以定义成“忠诚用户当中最忠诚的一群人”,因此创造超级用户 ...

  9. MySQL server has gone away

    场景: 批量写入数据时,MySQL server has gone away 解决方法: 在 my.ini 中 将 max_allowed_packet 参数设置大一点  show global va ...

  10. Centos7 yum安装tomcat

    以下操作是在线安装apache-tomcat 需要联网下载包. liux系统环境 [root@localhost ~]# cat /etc/redhat-release CentOS Linux re ...