合工大JAVA实验四web_Java serve_ client聊天之serve端(合工大java实验四)by峰宇

这是一个JAVA实现的服务器端聊天程序,包括Myframe类用于创建GUI界面,接收用户输入的端口号并启动服务器,以及CreatServer和Chat类分别用于处理客户端连接和消息传递。程序通过Socket进行通信,支持多客户端同时在线聊天。
摘要由CSDN通过智能技术生成

服务器端主程序

package server;

import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.Component;

import java.awt.HeadlessException;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

import java.time.temporal.JulianFields;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import javax.swing.JButton;

import javax.swing.JEditorPane;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.JTextPane;

import javax.swing.text.BadLocationException;

import javax.swing.text.SimpleAttributeSet;

import javax.swing.text.StyledDocument;

import Messagemy.Messagemy;

public class Myframe extends JFrame {

DataInputStream dataInputStrea;

DataOutputStream dataOutputStream;

BorderLayout bLayout;

JLabel area;

JTextField jEditorPane;

JButton jButtonP;

JLabel areaxia;

JEditorPane jEditorPanexia;

JButton jButtonPxia;

JTextPane Jzhongshow;

public Myframe(String title, int x, int y, int w, int h)

throws HeadlessException {

super(title);

setLocation(x, y);

setSize(w, h);

init();

this.setVisible(true);

}

private void init() {

area = new JLabel("端口");

jEditorPane = new JTextField(6);

jButtonP = new JButton("确定");

JPanel jshang = new JPanel();

jshang.add(area);

jshang.add(jEditorPane);

jshang.add(jButtonP);

Jzhongshow = new JTextPane();

Jzhongshow.setEditable(false);

JScrollPane jScrollPanezhong = new JScrollPane(Jzhongshow);

areaxia = new JLabel("Say");

jEditorPanexia = new JEditorPane();

jButtonPxia = new JButton("发送");

jButtonPxia.addActionListener(new sendmessege());

JPanel jxia = new JPanel();

jxia.add(areaxia);

jxia.add(jEditorPanexia);

jxia.add(jButtonPxia);

add(jshang, BorderLayout.NORTH);

add(jScrollPanezhong, BorderLayout.CENTER);

add(jxia, BorderLayout.SOUTH);

jButtonP.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

int port = Integer.valueOf(jEditorPane.getText().toString());

Createserver createserver = new Createserver(port);

createserver.start();

try {

Clientchat clientchat = new Clientchat("127.0.0.1", port);

clientchat.start();

} catch (UnknownHostException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

});

}

public class sendmessege implements ActionListener {

@Override

public void actionPerformed(ActionEvent e) {

String message = jEditorPanexia.getText().toString();

Date date = new Date();

String namem = "我: ";

Messagemy messagemy = new Messagemy(namem, date, message);

try {

dataOutputStream.writeUTF(message);

dataOutputStream.flush();

insertmaserge(messagemy);

jEditorPanexia.setText("");

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

private void insertmaserge(Messagemy messagemy) {

StyledDocument doc = Jzhongshow.getStyledDocument();

SimpleAttributeSet attr = new SimpleAttributeSet();

String s = messagemy.getDate() + " " + '\n';

String p = messagemy.getName() + " : " + messagemy.getMessage() + '\n';

try {

doc.insertString(doc.getLength(), s, attr);

doc.insertString(doc.getLength(), p, attr);

doc.insertString(doc.getLength(), "\n", attr);

Jzhongshow.setCaretPosition(Jzhongshow.getDocument().getLength());

} catch (BadLocationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public class Clientchat extends Thread {

public Clientchat(String ip, int p) throws UnknownHostException,

IOException {

Socket socket = new Socket(ip, p);

dataInputStrea = new DataInputStream(socket.getInputStream());

dataOutputStream = new DataOutputStream(socket.getOutputStream());

}

@Override

public void run() {

while (true) {

try {

String s = dataInputStrea.readUTF();

Date date = new Date();

String namem = "他";

System.out.println(s);

Messagemy messagemy = new Messagemy(namem, date, s);

insertmaserge(messagemy);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

package server;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

public class Createserver extends Thread {

int port;

public static List chats = new ArrayList();

static private ServerSocket serverSocket;

public static ServerSocket getServerSocket() {

return serverSocket;

}

public static void setServerSocket(ServerSocket serverSocket) {

Createserver.serverSocket = serverSocket;

}

public Createserver(int port) {

super();

this.port = port;

try {

serverSocket = new ServerSocket(port);

System.out.println("服務器 ");

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

@Override

public void run() {

while (true) {

Socket socket = null;

try {

socket = serverSocket.accept();

System.out.println("有客户到了 ");

Chat chat;

chat = new Chat(socket);

chat.start();

chats.add(chat);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

package server;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

public class Chat extends Thread {

DataInputStream inputStream;

DataOutputStream OutputStream;

Socket socket;

public Chat(Socket socket) throws IOException {

this.socket = socket;

inputStream = new DataInputStream(socket.getInputStream());

OutputStream = new DataOutputStream(socket.getOutputStream());

}

@Override

public void run() {

while (true) {

try {

@SuppressWarnings("deprecation")

String s = inputStream.readUTF();

List chats = Createserver.chats;

for (int i = 0; i < chats.size(); i++) {

Chat a = chats.get(i);

if (!this.equals(a)) {

DataOutputStream outputStream = a.OutputStream;

outputStream.writeUTF(s);

outputStream.flush();

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}      by --峰宇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值