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. [转]恕我直言,在座的各位根本不会写 Java!

    导语 自 2013 年毕业后,今年已经是我工作的第 4 个年头了,总在做 Java 相关的工作,终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果你真的是一个 Java 程序员,那 ...

  2. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

  3. 分析轮子(十)- HashMap.java 之概念梳理

    注:玩的是JDK1.7版本 一:还是原来的风格,先上一下类的继承关系图,这样能够比较清楚的知道此类的相关特性 二:HashMap.java 的代码比较难看,所以,我看了几天,写的话也分开来写,这样能表 ...

  4. Spring Boot常见配置及错误

    一.SpringBoot常见配置 (1)SpingBoot与MyBatis集成时跟踪SQL语句 log4j: logger: java: sql: ResultSet: TRACE (2)日志跟踪 d ...

  5. 在WPF中的Canvas上实现控件的拖动、缩放

    如题,项目中需要实现使用鼠标拖动.缩放一个矩形框,WPF中没有现成的,那就自己造一个轮子:) 造轮子前先看看Windows自带的画图工具中是怎样做的,如下图: 在被拖动的矩形框四周有9个小框,可以从不 ...

  6. Atitit r2017 r6 doc list on home ntpc.docx

    Atitit r2017 r6 doc list on home ntpc.docx 驱动器 D 中的卷是 p2soft 卷的序列号是 9AD0-D3C8 D:\ati\r2017 v4 raf\r2 ...

  7. Atitit 乌合之众读后感attilax总结 与读后感结构规范总结

    Atitit 乌合之众读后感attilax总结 与读后感结构规范总结 1. 背景概览与鸟瞰overview 1 1.1. 社会背景 与 历史事件背景  与历史时间背景 1 1.2. 书籍简绍 2 1. ...

  8. Source Insight小技巧:修改Symbol Window的默认宽度

    SI是个好东西,但是源代码窗口左边的符号窗口的默认宽度实在是太小,每次打开一个新的源码窗口都要重新拖放调整,很烦人.下面是一劳永逸调整Symbol Window宽度的方法. 打开一个源码窗口,将Sym ...

  9. Nmap备忘单

    #在推特上看到,感觉做的相当不错就转一波. 目标规格 开关 例 描述   nmap 192.168.1.1 扫描一个IP   nmap 192.168.1.1 192.168.2.1 扫描特定的IP地 ...

  10. list add对象踩的坑

    list 添加对象时,没有把new object写到循环体里,导致最后添加了相同的一个对象: public List<goods> find(String goodsname) { Lis ...