根据课本改变的多线程聊天小程序
来源:互联网 发布:软件质量问题处理流程 编辑:程序博客网 时间:2024/05/01 16:06
控制台 编译客户端 再编译用户端(两个)
//////////////////////////////////////////////////////////
////多线程 聊天程序 客户端部分
////第十四周作业 齐兆龙
////editplus 编写 命令提示符编译
////运行命令 QZL1201.java
//////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class QZL1201 extends JFrame implements Runnable
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
private int m_clientNumber=0;
public Thread t1,t2,t3;
public QZL1201()
{
super("简单聊天小程序 服务端");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(true);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("服务器端:"+s);
m_enter.setText("");
}
catch (Exception e)
{
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
});
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
t1=new Thread(this);
t1.start();
t2=new Thread(this);
t2.start();
}
public void mb_displayAppend(String s)
{
m_display.append(s+"/n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return(true);
if(m.equalsIgnoreCase("quit"))
return(true);
if(m.equalsIgnoreCase("exit"))
return(true);
if(m.equalsIgnoreCase("end"))
return(true);
if(m.equalsIgnoreCase("结束"))
return(true);
return(false);
}
public void run()
{
if(Thread.currentThread()==t1)
{
try
{
//System.out.println("sdfsadfasdfasd");
ServerSocket server=new ServerSocket(5000);
String m;
while(true)
{
m_clientNumber++;
mb_displayAppend("等待连接["+m_clientNumber+"]");
Socket s=server.accept();
mb_displayAppend("接收到客户端连接["+m_clientNumber+"]");
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_output.writeObject("连接成功");
m_output.flush();
m_enter.setEnabled(true);
do
{
m=(String) m_input.readObject();
mb_displayAppend("客户端:"+m);
}
while (!mb_isEndSession(m));
//m_output.writeObject("q");
//m_output.flush();
//m_enter.setEnabled(false);
//m_output.close();
//m_input.close();
//s.close();
mb_displayAppend("连接["+m_clientNumber+"]结束");
}
}
catch (Exception e)
{
System.err.println("发生异常"+e);
e.printStackTrace();
mb_displayAppend("连接["+m_clientNumber+"]发生异常");
}
}
if(Thread.currentThread()==t2)
{
try
{
//System.out.println("sdfsadfasdfasd");
ServerSocket server=new ServerSocket(5001);
String m;
while(true)
{
m_clientNumber++;
mb_displayAppend("等待连接["+m_clientNumber+"]");
Socket s=server.accept();
mb_displayAppend("接收到客户端连接["+m_clientNumber+"]");
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_output.writeObject("连接成功");
m_output.flush();
m_enter.setEnabled(true);
do
{
m=(String) m_input.readObject();
mb_displayAppend("客户端:"+m);
}
while (!mb_isEndSession(m));
m_output.writeObject("q");
m_output.flush();
m_enter.setEnabled(false);
m_output.close();
m_input.close();
s.close();
mb_displayAppend("连接["+m_clientNumber+"]结束");
}
}
catch (Exception e)
{
System.err.println("发生异常"+e);
e.printStackTrace();
mb_displayAppend("连接["+m_clientNumber+"]发生异常");
}
}
}
public static void main(String args[])
{
QZL1201 app=new QZL1201();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
}
}
//////////////////////////////////////////////////////////
////多线程 聊天程序 客户端部分
////第十四周作业 齐兆龙
////editplus 编写 命令提示符编译
////运行命令 QZL1201.java
//////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
class QZL1201client1 extends JFrame
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
public QZL1201client1()
{
super("简单聊天小程序 客户端1");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(false);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("客户端:"+s);
m_enter.setText("");
}
catch (Exception e)
{
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
});
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
}
public void mb_displayAppend(String s)
{
m_display.append(s+"/n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
/*public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return(true);
if(m.equalsIgnoreCase("quit"))
return(true);
if(m.equalsIgnoreCase("exit"))
return(true);
if(m.equalsIgnoreCase("end"))
return(true);
if(m.equalsIgnoreCase("结束"))
return(true);
return(false);
}*/
public void mb_run(String host,int port)
{
try
{
mb_displayAppend("尝试连接");
Socket s=new Socket(host,port);
String m;
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_enter.setEnabled(true);
//m_output.writeObject("q");
//m_output.flush();
//m_enter.setEnabled(false);
//m_output.close();
//m_input.close();
//s.close();
//System.exit(0);
do
{
m=(String) m_input.readObject();
mb_displayAppend("服务器端:"+m);
}
while (true);
}
catch (Exception e)
{
System.err.println("发生异常"+e);
e.printStackTrace();
mb_displayAppend("发生异常");
}
}
public static void main(String[] args)
{
QZL1201client1 app=new QZL1201client1();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
if(args.length==0)
{
app.mb_run("localhost",5000);
}else app.mb_run(args[0],5000);
}
}
//////////////////////////////////////////////////////////
////多线程 聊天程序 客户端部分
////第十四周作业 齐兆龙
////editplus 编写 命令提示符编译
////运行命令 QZL1201.java
//////////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
class QZL1201client2 extends JFrame
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
public QZL1201client2()
{
super("简单聊天小程序 客户端2");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(false);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("客户端:"+s);
m_enter.setText("");
}
catch (Exception e)
{
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
});
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
}
public void mb_displayAppend(String s)
{
m_display.append(s+"/n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
/*public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return(true);
if(m.equalsIgnoreCase("quit"))
return(true);
if(m.equalsIgnoreCase("exit"))
return(true);
if(m.equalsIgnoreCase("end"))
return(true);
if(m.equalsIgnoreCase("结束"))
return(true);
return(false);
}*/
public void mb_run(String host,int port)
{
try
{
mb_displayAppend("尝试连接");
Socket s=new Socket(host,port);
String m;
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_enter.setEnabled(true);
//m_output.writeObject("q");
//m_output.flush();
//m_enter.setEnabled(false);
//m_output.close();
//m_input.close();
//s.close();
//System.exit(0);
do
{
m=(String) m_input.readObject();
mb_displayAppend("服务器端:"+m);
}
while (true);
}
catch (Exception e)
{
System.err.println("发生异常"+e);
e.printStackTrace();
mb_displayAppend("发生异常");
}
}
public static void main(String[] args)
{
QZL1201client2 app=new QZL1201client2();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
if(args.length==0)
{
app.mb_run("localhost",5001);
}else app.mb_run(args[0],5001);
}
}
- 根据课本改变的多线程聊天小程序
- 结合多线程、Socket的聊天小程序
- 基于Java socket和多线程的简易聊天小程序
- 课本上一个很好的java多线程服务器程序
- 简单的聊天小程序
- java的聊天小程序
- 利用多线程与网络编程编写的实时聊天小程序
- 基于TCP 的多线程 聊天程序
- Socket编程 一个小的聊天程序
- 我的聊天类小程序
- Win32API 写的 Socket 聊天小程序
- 实现类似qq的聊天小程序
- 多线程聊天程序
- 多线程实现聊天程序
- java小聊天程序
- java聊天小程序
- udp聊天小程序
- 在线聊天小程序
- JPA调用存储过程[转]
- 自定义ClassLoader 简单例子
- Javascript定义函数和this使用
- 孙鑫MFC笔记(15)--多线程和聊天室的创建
- BREW
- 根据课本改变的多线程聊天小程序
- 电脑S端子连接电视S端子的方法
- MMU解释
- Error: ArcIMS Service: name has timed out.
- 从NAND闪存中启动U-BOOT的设计
- 矩阵对抗与漏洞补丁200912(第3期)
- Protel 快捷键
- 精英杀手锏:三招打造职场核心竞争力
- non-virtual and virtual functions