import java.io.*; import java.net.*; import java.util.*; public class Server { public static ArrayList<ServerThread> list=new ArrayList<ServerThread>(); public static int clientnum=0; public static void main(String[] args){ try { //创建一个服务器的Socket ServerSocket serverSocket=new ServerSocket(8888); Socket socket=null; System.out.println("*****服务器即将启动,等待客户端链接*****"); DataInputStream dis; DataOutputStream dos; while(true){ //调用accept()方法开始监听,等待客户端的链接 socket=serverSocket.accept(); dis=new DataInputStream(socket.getInputStream()); dos=new DataOutputStream(socket.getOutputStream()); //创建线程 ServerThread thread=new ServerThread(dis,dos,clientnum); thread.start(); list.add(thread); clientnum++; } } catch (IOException e) { e.printStackTrace(); } } } import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.net.*; /* * 服务器线程的作用主要是: * 1.接收来自客户端的信息 * 2.将接收到的信息解析,并转发给目标客户端 * */ public class ServerThread extends Thread { public static String[] name=new String[10]; int id; DataInputStream dis; DataOutputStream dos; public ServerThread(DataInputStream dis,DataOutputStream dos,int num){ this.dis=dis; this.dos=dos; this.id = num; } public void run() { while(true){ try{ String masg=dis.readUTF(); for(int i=0;i<Server.clientnum;i++){ Server.list.get(i).dos.writeUTF(masg); dos.flush(); } }catch(IOException e){ e.printStackTrace(); } } } } import java.io.*; import java.net.*; import java.util.ArrayList; import javax.swing.*; public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 8888); DataInputStream dis=new DataInputStream(socket.getInputStream()); DataOutputStream dos=new DataOutputStream(socket.getOutputStream()); Load load=new Load(dos); load.setVisible(true); ClientThread thread=new ClientThread(dis,load.getChat().getta()); thread.start(); //开启一个线程接收信息,并解析 //thread.start(); //主线程用来发送信息 }catch(Exception e){ System.out.println("服务器异常"); } } }
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import javax.swing.*;
import java.awt.*;
/**
* 作用:一直接收服务端转发过来的信息
* */
public class ClientThread extends Thread {
DataInputStream dis;
JTextArea ta;
public ClientThread(DataInputStream dis,JTextArea ta){
this.dis = dis;
this.ta=ta;
//this.start();
}
public void run() {
String masg=null;
while(true){
try {
masg=dis.readUTF();
ta.append(masg);
}catch(IOException e1) {
e1.printStackTrace();
}
}
}
}
class MyListener implements ActionListener,KeyListener {
public void actionPerformed(ActionEvent e) {
String s = "";
Date d=new Date();
SimpleDateFormat sj=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(e.getActionCommand()=="牛头梗"){
me.setText(s+"To:"+e.getActionCommand());
dxname="牛头梗";
masg=sj.format(d)+"\n"+s+"对"+dxname+"说:"+tf1.getText();
}else if(e.getActionCommand()=="中华田园犬"){
me.setText(s+"To:"+e.getActionCommand());
dxname="中华田园犬";
masg=sj.format(d)+"\n"+s+"对"+dxname+"说:"+tf1.getText();
}else if(e.getActionCommand()=="东北二哈"){
me.setText(s+"To:"+e.getActionCommand());
dxname="东北二哈";
masg=sj.format(d)+"\n"+s+"对"+dxname+"说:"+tf1.getText();
}else if(e.getActionCommand()=="发送") {
s1=sj.format(d)+"\n"+s+jc1.getSelectedItem()+"的对"+dxname+"说:"+tf1.getText()+"\n";
ta1.append(s1);//tf1.getText()获取输入框的文字将其输入到ta1留言框中
tf1.setText (null);
try{
dos.writeUTF(masg);
dos.flush();
}catch(IOException e1) {
e1.printStackTrace();
}
}
}
@Override
public void keyPressed(KeyEvent a) {
// TODO Auto-generated method stub
String s= "";
int key=a.getKeyCode();
if(key==10) {
Date d=new Date();
SimpleDateFormat sj=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
s=sj.format(d)+"\n"+jc1.getSelectedItem()+"地说:"+tf1.getText()+"\n";
ta1.append(s);//tf1.getText()获取输入框的文字将其输入到ta1留言框中
tf1.setText (null);
}
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
}
相关分类