关键字: Java
服务器端:java 代码
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ChatServe extends JFrame implements ActionListener{
//文本区域类,用于向对方发送信息
private JTextField jtf=new JTextField();
//文本域类,用于记录双方聊天记录
private JTextArea jta=new JTextArea();
//来自客户端的信息
private DataInputStream msgFromClient;
//发往客户端的信息
private DataOutputStream msgToClient;
public static void main(String[] args) {
new ChatServe();
}
public ChatServe(){//服务器端类的构造函数
//建立一个写信息的面板
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("写信息:"),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
getContentPane().setLayout(new BorderLayout());
//把聊天记录区加到内容面板并加上一个滚动条
getContentPane().add(p,BorderLayout.SOUTH);
getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);
//触发事件监听器
jtf.addActionListener(this);
setTitle("聊天程序服务器端");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try{
//建立服务器SOCKET
ServerSocket serverSocket=new ServerSocket(8000);
jta.append("聊天服务器开始时间"+new Date()+'\n');
Socket socket=serverSocket.accept();
msgFromClient=new DataInputStream(socket.getInputStream());
msgToClient=new DataOutputStream(socket.getOutputStream());
}
catch(IOException ex){
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent e){
String actionCommand=e.getActionCommand();
if(e.getSource() instanceof JTextField){
try{
String ToClient=jtf.getText().trim();
msgToClient.writeBytes(ToClient);
msgToClient.flush();
jta.append("服务器:"+ToClient+'\n');
String FromClient=msgFromClient.readUTF();
jta.append("客户端:"+msgFromClient+'\n');
}
catch(IOException ex){
System.out.println(ex);
}
}
}
} 客 户端:java 代码
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ChatClient extends JFrame implements ActionListener{
//文本区域类,用于记录双方聊天内容
private JTextField jtf=new JTextField();
private JTextArea jta=new JTextArea();
private DataInputStream msgFromServer;
private DataOutputStream msgToServer;
public static void main(String[] args) {
new ChatClient();
}
public ChatClient(){//服务器端类的构造函数
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("写信息:"),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
getContentPane().setLayout(new BorderLayout());
//把聊天记录区加到内容面板并加上一个滚动条
getContentPane().add(p,BorderLayout.SOUTH);
getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);
jtf.addActionListener(this);
setTitle("聊天程序客户端");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try{
//建立SOCKET
jta.append("聊天服务器开始时间"+new Date()+'\n');
Socket socket=new Socket("localhost",8000);
msgFromServer=new DataInputStream(socket.getInputStream());
msgToServer=new DataOutputStream(socket.getOutputStream());
}
catch(IOException ex){
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent e){
String actionCommand=e.getActionCommand();
if(e.getSource() instanceof JTextField){
try{
String ToServer=jtf.getText().trim();
msgToServer.writeBytes(ToServer);
msgToServer.flush();
jta.append("客户端:"+ToServer+'\n');
String FromServer=msgFromServer.readUTF();
jta.append("服务器:"+FromServer+'\n');
}
catch(IOException ex){
System.out.println(ex);
}
}
}
}
不仅都收不到对方的信息,而且连关闭窗口都关不了,不知道为什么.请!
服务器端:java 代码
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ChatServe extends JFrame implements ActionListener{
//文本区域类,用于向对方发送信息
private JTextField jtf=new JTextField();
//文本域类,用于记录双方聊天记录
private JTextArea jta=new JTextArea();
//来自客户端的信息
private DataInputStream msgFromClient;
//发往客户端的信息
private DataOutputStream msgToClient;
public static void main(String[] args) {
new ChatServe();
}
public ChatServe(){//服务器端类的构造函数
//建立一个写信息的面板
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("写信息:"),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
getContentPane().setLayout(new BorderLayout());
//把聊天记录区加到内容面板并加上一个滚动条
getContentPane().add(p,BorderLayout.SOUTH);
getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);
//触发事件监听器
jtf.addActionListener(this);
setTitle("聊天程序服务器端");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try{
//建立服务器SOCKET
ServerSocket serverSocket=new ServerSocket(8000);
jta.append("聊天服务器开始时间"+new Date()+'\n');
Socket socket=serverSocket.accept();
msgFromClient=new DataInputStream(socket.getInputStream());
msgToClient=new DataOutputStream(socket.getOutputStream());
}
catch(IOException ex){
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent e){
String actionCommand=e.getActionCommand();
if(e.getSource() instanceof JTextField){
try{
String ToClient=jtf.getText().trim();
msgToClient.writeBytes(ToClient);
msgToClient.flush();
jta.append("服务器:"+ToClient+'\n');
String FromClient=msgFromClient.readUTF();
jta.append("客户端:"+msgFromClient+'\n');
}
catch(IOException ex){
System.out.println(ex);
}
}
}
} 客 户端:java 代码
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ChatClient extends JFrame implements ActionListener{
//文本区域类,用于记录双方聊天内容
private JTextField jtf=new JTextField();
private JTextArea jta=new JTextArea();
private DataInputStream msgFromServer;
private DataOutputStream msgToServer;
public static void main(String[] args) {
new ChatClient();
}
public ChatClient(){//服务器端类的构造函数
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("写信息:"),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
getContentPane().setLayout(new BorderLayout());
//把聊天记录区加到内容面板并加上一个滚动条
getContentPane().add(p,BorderLayout.SOUTH);
getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);
jtf.addActionListener(this);
setTitle("聊天程序客户端");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try{
//建立SOCKET
jta.append("聊天服务器开始时间"+new Date()+'\n');
Socket socket=new Socket("localhost",8000);
msgFromServer=new DataInputStream(socket.getInputStream());
msgToServer=new DataOutputStream(socket.getOutputStream());
}
catch(IOException ex){
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent e){
String actionCommand=e.getActionCommand();
if(e.getSource() instanceof JTextField){
try{
String ToServer=jtf.getText().trim();
msgToServer.writeBytes(ToServer);
msgToServer.flush();
jta.append("客户端:"+ToServer+'\n');
String FromServer=msgFromServer.readUTF();
jta.append("服务器:"+FromServer+'\n');
}
catch(IOException ex){
System.out.println(ex);
}
}
}
}
不仅都收不到对方的信息,而且连关闭窗口都关不了,不知道为什么.请!
import java.io.*;
import java.util.*;
public class Server{
static Vector outList;
public static void main(String args[]) throws Exception{
outList = new Vector();
ServerSocket server = new ServerSocket(2000);
System.out.println("服务器已经启动");
while(true){
Socket c = server.accept();
ProcessClient p = new ProcessClient(c);
p.start();
}
}
}
class ProcessClient extends Thread{
Socket client;
public ProcessClient(Socket client){
this.client = client;
}
public void run(){
DataOutputStream dos = null;
try{
System.out.println(client.getInetAddress()+"连接到服务器");
InputStream in = client.getInputStream();
DataInputStream dis = new DataInputStream(in);
OutputStream out = client.getOutputStream();
dos = new DataOutputStream(out);
Server.outList.add(dos);
while(true){
String msg = dis.readUTF();
System.out.println(msg);
for(int i=0;i<Server.outList.size();i++){
DataOutputStream d =(DataOutputStream) Server.outList.elementAt(i);
d.writeUTF(client.getInetAddress()+":"+msg);
}
}
}catch(Exception e){
System.out.println(client.getInetAddress()+"退出了");
Server.outList.removeElement(dos);
try{
client.close();
}catch(Exception e1){
}
}
}
}
客户端代码:import java.net.*;
import java.io.*;
public class Client {
public static void main(String args[]){
ProcessServer p = new ProcessServer();
p.start();
}
}
class ProcessServer extends Thread{
public void run(){
try{
Socket server = new Socket("127.0.0.1",2000);
InputStream in = server.getInputStream();
DataInputStream dis = new DataInputStream(in);
ProcessInput p = new ProcessInput(dis);
p.start();
OutputStream out = server.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
while(true){
String userInput = getUserInput();
dos.writeUTF(userInput);
}
}catch(Exception e){
}
}
public String getUserInput(){
System.out.print("发送信息:");
InputStreamReader inr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inr);
try {
String s = br.readLine();
return s;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
class ProcessInput extends Thread{
DataInputStream dis;
public ProcessInput(DataInputStream dis){
this.dis = dis;
}
public void run(){
while(true){
try{
String msg = dis.readUTF();
System.out.println(msg);
}catch(Exception e){
}
}
}
}