下面是client、server端的程序,不知怎么写才能完成两边的通信
客户端/*
* 聊天窗口主方法
*/
package chatinterface;import java.io.*;import javax.swing.*;import java.awt.*;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;class frame extends JFrame {
public frame() {
display pan1 = new display();
Container c = getContentPane();
c.add(pan1);
}
} class display extends JPanel implements ActionListener{
private JList userlist;
private JTextField ip_Address;
private JTextField nickname;
private JTextField port;
private String message = "";
private JScrollPane scroll; //滚动条对象
JTextArea dis_TextArea;
JTextArea sentarea;
JButton sent;
JButton login;
Socket socket;
DataInputStream dis;
DataOutputStream dos;
public display() {
this.setLayout(null); // 设置为无布局
dis_TextArea = new JTextArea(1,20); // 定义显示消息栏
//scroll = new JScrollPane(dis_TextArea);
dis_TextArea.setFont(new Font("PMingLiU", Font.PLAIN, 12));
dis_TextArea.setBackground(new Color(255, 255, 240));
dis_TextArea.setLineWrap(true);
dis_TextArea.setBounds(5, 26, 280, 179); sentarea = new JTextArea(1, 20); // 发送消息栏
sentarea.setFont(new Font("PMingLiU", Font.PLAIN, 12));
sentarea.setBackground(new Color(255, 250, 240));
sentarea.setLineWrap(true);
sentarea.setBounds(5, 232, 280, 38); sent = new JButton("发送"); // 发送按钮
sent.setFont(new Font("MingLiU", Font.BOLD, 12));
sent.setBounds(290, 235, 60, 35);
sent.addActionListener(this);
login = new JButton("登陆"); // 登陆按钮
login.setFont(new Font("PMingLiU", Font.BOLD, 12));
login.setBounds(290, 285, 60, 35);
JLabel user = new JLabel("昵称"); // 昵称标签
user.setBounds(5, 275, 36, 20); // 将组件添加到面板
add(dis_TextArea);
add(sentarea);
add(sent);
add(login);
add(user); final JLabel serverip = new JLabel(); // 服务器端IP
serverip.setText("服务器IP&端口");
serverip.setBounds(5, 300, 94, 20);
add(serverip); final JLabel label = new JLabel(); // 冒号标签
label.setText(":");
label.setBounds(205, 305, 6, 15);
add(label); port = new JTextField(); // 服务器端端口
port.setBounds(215, 300, 50, 20);
add(port); nickname = new JTextField(); // 昵称
nickname.setBounds(105, 275, 95, 20);
add(nickname); ip_Address = new JTextField(); // IP地址
ip_Address.setBounds(105, 300, 95, 20);
add(ip_Address); userlist = new JList(); // 用户列表
userlist.setBounds(302, 26, 95, 179);
add(userlist); final JLabel label_1 = new JLabel(); // 用户列表标签
label_1.setText("用户列表");
label_1.setBounds(320, 5, 60, 15);
add(label_1); final JLabel label_2 = new JLabel(); // 信息栏标签
label_2.setText("信息栏");
label_2.setBounds(5, 5, 164, 15);
add(label_2); final JLabel label_3 = new JLabel(); // 发送栏标签
label_3.setText("发送栏");
label_3.setBounds(5, 211, 280, 15);
add(label_3);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==sent){
try{
socket = new Socket("127.0.0.1",8000);
message=sentarea.getText(); //将发送栏内容传导message
dis_TextArea.append(message+"\r\n"); //将message发送到显示栏
dos= new DataOutputStream(socket.getOutputStream());
dos.writeChars(message);
sentarea.setText(""); //清空发送栏
}catch(Exception ee){
System.out.print(ee.getMessage());
}
}
}
}public class ChatUI {
public static void main(String args[]) {
frame fr = new frame();
fr.show(); // 设置窗口可显示
fr.setSize(500, 400); // 窗口大小
fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE); // 窗口最小化,关闭功能
fr.setResizable(false); // 是否窗口可调整大小(false)
fr.setTitle("ChatUI"); // 窗口标题
fr.setBounds(300, 200, 500, 400); // 窗口初始坐标,初始大小
}
}[
package chatinterface;
/*
* 服务器窗口主方法
*/
import java.io.*;import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;public class server {
public static void main(String args[]){
server_frame fr = new server_frame();
fr.setSize(300,400);
fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE);
fr.setResizable(false);
fr.setTitle("ChatUI");
fr.setBounds(300,200,300,350);
fr.show();
}
}
class server_frame extends JFrame{
public server_frame(){
serverDisplay serverpane = new serverDisplay();
Container c=getContentPane();
c.add(serverpane);
}
}
class serverDisplay extends JPanel implements ActionListener{
private JTextArea sent_Area;
private JTextArea dis_Area;
private JTextField textField_1;
private JTextField textField;
PrintStream output; //输出流
JButton submit;
JButton reset;
JTextArea welcome_word;
ServerSocket server;
Socket socket;
DataOutputStream dos=null;
public serverDisplay(){
this.setLayout(null); //设置为无布局 submit = new JButton();
submit.setText("启动");
submit.setBounds(35, 275, 60, 23);
add(submit);
reset = new JButton();
reset.setText("重填");
reset.setBounds(167, 275, 60, 23);
add(reset); JLabel servIP = new JLabel();
servIP.setText("服务器IP");
servIP.setBounds(35, 48, 60, 15);
add(servIP); final JLabel servport = new JLabel();
servport.setText("服务器端口");
servport.setBounds(35, 97, 79, 15);
add(servport); textField = new JTextField();
textField.setBounds(120, 46, 95, 20);
add(textField); textField_1 = new JTextField();
textField_1.setBounds(120, 95, 95, 20);
add(textField_1); welcome_word = new JTextArea();
welcome_word.setText("");
welcome_word.setBounds(35, 180, 192, 89);
add(welcome_word); final JLabel welcome_message = new JLabel();
welcome_message.setText("服务器提示信息");
welcome_message.setBounds(35, 152, 149, 15);
add(welcome_message); final JButton unlink = new JButton();
unlink.setText("断开");
unlink.setBounds(101, 275, 60, 23);
add(unlink); this.sent_Area = new JTextArea();
this.sent_Area.setBounds(254, 46, 163, 121);
add(this.sent_Area); sent_Area = new JTextArea();
sent_Area.setBounds(254, 180, 163, 118);
add(sent_Area); final JButton sentbutton = new JButton();
sentbutton.setText("发送");
sentbutton.setBounds(423, 260, 60, 39);
add(sentbutton);
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()=="启动"){
try{
server = new ServerSocket(8000);
socket=server.accept();
dos = new DataOutputStream(socket.getOutputStream());
System.out.println("welcome!");
dos.writeUTF("欢迎登陆");
dos.close();
server.close();
}catch(Exception ee){
System.out.println(ee.getMessage());
}
}
}
}
客户端/*
* 聊天窗口主方法
*/
package chatinterface;import java.io.*;import javax.swing.*;import java.awt.*;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;class frame extends JFrame {
public frame() {
display pan1 = new display();
Container c = getContentPane();
c.add(pan1);
}
} class display extends JPanel implements ActionListener{
private JList userlist;
private JTextField ip_Address;
private JTextField nickname;
private JTextField port;
private String message = "";
private JScrollPane scroll; //滚动条对象
JTextArea dis_TextArea;
JTextArea sentarea;
JButton sent;
JButton login;
Socket socket;
DataInputStream dis;
DataOutputStream dos;
public display() {
this.setLayout(null); // 设置为无布局
dis_TextArea = new JTextArea(1,20); // 定义显示消息栏
//scroll = new JScrollPane(dis_TextArea);
dis_TextArea.setFont(new Font("PMingLiU", Font.PLAIN, 12));
dis_TextArea.setBackground(new Color(255, 255, 240));
dis_TextArea.setLineWrap(true);
dis_TextArea.setBounds(5, 26, 280, 179); sentarea = new JTextArea(1, 20); // 发送消息栏
sentarea.setFont(new Font("PMingLiU", Font.PLAIN, 12));
sentarea.setBackground(new Color(255, 250, 240));
sentarea.setLineWrap(true);
sentarea.setBounds(5, 232, 280, 38); sent = new JButton("发送"); // 发送按钮
sent.setFont(new Font("MingLiU", Font.BOLD, 12));
sent.setBounds(290, 235, 60, 35);
sent.addActionListener(this);
login = new JButton("登陆"); // 登陆按钮
login.setFont(new Font("PMingLiU", Font.BOLD, 12));
login.setBounds(290, 285, 60, 35);
JLabel user = new JLabel("昵称"); // 昵称标签
user.setBounds(5, 275, 36, 20); // 将组件添加到面板
add(dis_TextArea);
add(sentarea);
add(sent);
add(login);
add(user); final JLabel serverip = new JLabel(); // 服务器端IP
serverip.setText("服务器IP&端口");
serverip.setBounds(5, 300, 94, 20);
add(serverip); final JLabel label = new JLabel(); // 冒号标签
label.setText(":");
label.setBounds(205, 305, 6, 15);
add(label); port = new JTextField(); // 服务器端端口
port.setBounds(215, 300, 50, 20);
add(port); nickname = new JTextField(); // 昵称
nickname.setBounds(105, 275, 95, 20);
add(nickname); ip_Address = new JTextField(); // IP地址
ip_Address.setBounds(105, 300, 95, 20);
add(ip_Address); userlist = new JList(); // 用户列表
userlist.setBounds(302, 26, 95, 179);
add(userlist); final JLabel label_1 = new JLabel(); // 用户列表标签
label_1.setText("用户列表");
label_1.setBounds(320, 5, 60, 15);
add(label_1); final JLabel label_2 = new JLabel(); // 信息栏标签
label_2.setText("信息栏");
label_2.setBounds(5, 5, 164, 15);
add(label_2); final JLabel label_3 = new JLabel(); // 发送栏标签
label_3.setText("发送栏");
label_3.setBounds(5, 211, 280, 15);
add(label_3);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==sent){
try{
socket = new Socket("127.0.0.1",8000);
message=sentarea.getText(); //将发送栏内容传导message
dis_TextArea.append(message+"\r\n"); //将message发送到显示栏
dos= new DataOutputStream(socket.getOutputStream());
dos.writeChars(message);
sentarea.setText(""); //清空发送栏
}catch(Exception ee){
System.out.print(ee.getMessage());
}
}
}
}public class ChatUI {
public static void main(String args[]) {
frame fr = new frame();
fr.show(); // 设置窗口可显示
fr.setSize(500, 400); // 窗口大小
fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE); // 窗口最小化,关闭功能
fr.setResizable(false); // 是否窗口可调整大小(false)
fr.setTitle("ChatUI"); // 窗口标题
fr.setBounds(300, 200, 500, 400); // 窗口初始坐标,初始大小
}
}[
package chatinterface;
/*
* 服务器窗口主方法
*/
import java.io.*;import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;public class server {
public static void main(String args[]){
server_frame fr = new server_frame();
fr.setSize(300,400);
fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE);
fr.setResizable(false);
fr.setTitle("ChatUI");
fr.setBounds(300,200,300,350);
fr.show();
}
}
class server_frame extends JFrame{
public server_frame(){
serverDisplay serverpane = new serverDisplay();
Container c=getContentPane();
c.add(serverpane);
}
}
class serverDisplay extends JPanel implements ActionListener{
private JTextArea sent_Area;
private JTextArea dis_Area;
private JTextField textField_1;
private JTextField textField;
PrintStream output; //输出流
JButton submit;
JButton reset;
JTextArea welcome_word;
ServerSocket server;
Socket socket;
DataOutputStream dos=null;
public serverDisplay(){
this.setLayout(null); //设置为无布局 submit = new JButton();
submit.setText("启动");
submit.setBounds(35, 275, 60, 23);
add(submit);
reset = new JButton();
reset.setText("重填");
reset.setBounds(167, 275, 60, 23);
add(reset); JLabel servIP = new JLabel();
servIP.setText("服务器IP");
servIP.setBounds(35, 48, 60, 15);
add(servIP); final JLabel servport = new JLabel();
servport.setText("服务器端口");
servport.setBounds(35, 97, 79, 15);
add(servport); textField = new JTextField();
textField.setBounds(120, 46, 95, 20);
add(textField); textField_1 = new JTextField();
textField_1.setBounds(120, 95, 95, 20);
add(textField_1); welcome_word = new JTextArea();
welcome_word.setText("");
welcome_word.setBounds(35, 180, 192, 89);
add(welcome_word); final JLabel welcome_message = new JLabel();
welcome_message.setText("服务器提示信息");
welcome_message.setBounds(35, 152, 149, 15);
add(welcome_message); final JButton unlink = new JButton();
unlink.setText("断开");
unlink.setBounds(101, 275, 60, 23);
add(unlink); this.sent_Area = new JTextArea();
this.sent_Area.setBounds(254, 46, 163, 121);
add(this.sent_Area); sent_Area = new JTextArea();
sent_Area.setBounds(254, 180, 163, 118);
add(sent_Area); final JButton sentbutton = new JButton();
sentbutton.setText("发送");
sentbutton.setBounds(423, 260, 60, 39);
add(sentbutton);
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()=="启动"){
try{
server = new ServerSocket(8000);
socket=server.accept();
dos = new DataOutputStream(socket.getOutputStream());
System.out.println("welcome!");
dos.writeUTF("欢迎登陆");
dos.close();
server.close();
}catch(Exception ee){
System.out.println(ee.getMessage());
}
}
}
}
package D21.M2.Y2008;import java.io.*;import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;public class server {
public static void main(String args[]) {
server_frame fr = new server_frame();
fr.setSize(300, 400);
fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE);
fr.setResizable(false);
fr.setTitle("ChatUI");
fr.setBounds(300, 200, 300, 350);
fr.show();
}}class server_frame extends JFrame {
public server_frame() {
serverDisplay serverpane = new serverDisplay();
Container c = getContentPane();
c.add(serverpane);
}
}class serverDisplay extends JPanel implements ActionListener {
private JTextArea sent_Area;
private JTextArea dis_Area;
private JTextField textField_1;
private JTextField textField;
PrintStream output; // 输出流
JButton submit;
JButton reset;
JTextArea welcome_word;
ServerSocket server;
Socket socket;
DataOutputStream dos = null;
DataInputStream dis = null; public serverDisplay() {
this.setLayout(null); // 设置为无布局 submit = new JButton();
submit.setText("启动");
submit.setBounds(35, 275, 60, 23);
add(submit); reset = new JButton();
reset.setText("重填");
reset.setBounds(167, 275, 60, 23);
add(reset); JLabel servIP = new JLabel();
servIP.setText("服务器IP");
servIP.setBounds(35, 48, 60, 15);
add(servIP); final JLabel servport = new JLabel();
servport.setText("服务器端口");
servport.setBounds(35, 97, 79, 15);
add(servport); textField = new JTextField();
textField.setText("127.0.0.1");
textField.setBounds(120, 46, 95, 20);
add(textField); textField_1 = new JTextField();
textField_1.setText("12345");
textField_1.setBounds(120, 95, 95, 20);
add(textField_1); welcome_word = new JTextArea();
welcome_word.setText("");
welcome_word.setBounds(35, 180, 192, 89);
add(welcome_word); final JLabel welcome_message = new JLabel();
welcome_message.setText("服务器提示信息");
welcome_message.setBounds(35, 152, 149, 15);
add(welcome_message); final JButton unlink = new JButton();
unlink.setText("断开");
unlink.setBounds(101, 275, 60, 23);
add(unlink); this.sent_Area = new JTextArea();
this.sent_Area.setBounds(254, 46, 163, 121);
add(this.sent_Area); sent_Area = new JTextArea();
sent_Area.setBounds(254, 180, 163, 118);
add(sent_Area); final JButton sentbutton = new JButton();
sentbutton.setText("发送");
sentbutton.setBounds(423, 260, 60, 39);
add(sentbutton);
submit.addActionListener(this);
reset.addActionListener(this);
unlink.addActionListener(this);
} public void actionPerformed(ActionEvent e) { if (e.getActionCommand() == "启动") {
try {
server = new ServerSocket(Integer.parseInt(textField_1.getText()));
socket = server.accept();
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
sent_Area.append(dis.readUTF());
System.out.println("welcome!");
dos.writeUTF("欢迎登陆");
dos.close();
server.close();
} catch (Exception ee) {
System.out.println(ee.getMessage());
ee.printStackTrace();
}
} else if (e.getActionCommand() == "重填") {
} else if (e.getActionCommand() == "断开") {
}
}
}
package D21.M2.Y2008;import java.io.*;import javax.swing.*;import java.awt.*;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;class frame extends JFrame {
public frame() {
display pan1 = new display();
Container c = getContentPane();
c.add(pan1);
}
}class display extends JPanel implements ActionListener {
private JList userlist;
private JTextField ip_Address;
private JTextField nickname;
private JTextField port;
private String message = "";
private JScrollPane scroll; // 滚动条对象
JTextArea dis_TextArea;
JTextArea sentarea;
JButton sent;
JButton login;
Socket socket;
DataInputStream dis;
DataOutputStream dos; public display() {
this.setLayout(null); // 设置为无布局
dis_TextArea = new JTextArea(1, 20); // 定义显示消息栏
// scroll = new JScrollPane(dis_TextArea);
dis_TextArea.setFont(new Font("PMingLiU", Font.PLAIN, 12));
dis_TextArea.setBackground(new Color(255, 255, 240));
dis_TextArea.setLineWrap(true);
dis_TextArea.setBounds(5, 26, 280, 179); sentarea = new JTextArea(1, 20); // 发送消息栏
sentarea.setFont(new Font("PMingLiU", Font.PLAIN, 12));
sentarea.setBackground(new Color(255, 250, 240));
sentarea.setLineWrap(true);
sentarea.setBounds(5, 232, 280, 38); sent = new JButton("发送"); // 发送按钮
sent.setFont(new Font("MingLiU", Font.BOLD, 12));
sent.setBounds(290, 235, 60, 35);
sent.addActionListener(this); login = new JButton("登陆"); // 登陆按钮
login.setFont(new Font("PMingLiU", Font.BOLD, 12));
login.setBounds(290, 285, 60, 35); JLabel user = new JLabel("昵称"); // 昵称标签
user.setBounds(5, 275, 36, 20); // 将组件添加到面板
add(dis_TextArea);
add(sentarea);
add(sent);
add(login);
add(user); final JLabel serverip = new JLabel(); // 服务器端IP
serverip.setText("服务器IP&端口");
serverip.setBounds(5, 300, 94, 20);
add(serverip); final JLabel label = new JLabel(); // 冒号标签
label.setText(":");
label.setBounds(205, 305, 6, 15);
add(label); port = new JTextField(); // 服务器端端口
port.setBounds(215, 300, 50, 20);
add(port); nickname = new JTextField(); // 昵称
nickname.setBounds(105, 275, 95, 20);
add(nickname); ip_Address = new JTextField(); // IP地址
ip_Address.setText("127.0.0.1");
ip_Address.setBounds(105, 300, 95, 20);
add(ip_Address); userlist = new JList(); // 用户列表
userlist.setBounds(302, 26, 95, 179);
add(userlist); final JLabel label_1 = new JLabel(); // 用户列表标签
label_1.setText("用户列表");
label_1.setBounds(320, 5, 60, 15);
add(label_1); final JLabel label_2 = new JLabel(); // 信息栏标签
label_2.setText("信息栏");
label_2.setBounds(5, 5, 164, 15);
add(label_2); final JLabel label_3 = new JLabel(); // 发送栏标签
label_3.setText("发送栏");
label_3.setBounds(5, 211, 280, 15);
add(label_3);
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == sent) {
try {
socket = new Socket(ip_Address.getText(), Integer.parseInt(port.getText()));
message = sentarea.getText(); // 将发送栏内容传导message
dis_TextArea.append(message + "\r\n"); // 将message发送到显示栏
dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(message);
dis_TextArea.append(dis.readUTF() + "\n");
sentarea.setText(""); // 清空发送栏
} catch (Exception ee) {
System.out.print(ee.getMessage());
}
}
}
}public class ChatUI {
public static void main(String args[]) {
frame fr = new frame();
fr.setVisible(true);
// fr.show(); // 设置窗口可显示
fr.setSize(500, 400); // 窗口大小
// fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE); // 窗口最小化,关闭功能
// fr.setResizable(false); // 是否窗口可调整大小(false)
fr.setTitle("ChatUI"); // 窗口标题
fr.setBounds(300, 200, 500, 400); // 窗口初始坐标,初始大小
}
}
{
try
{
ServerSocket server = new ServerSocket(2500);
Socket connection;
while(true)
{
connection = server.accept();
//creat a server handle instance to process
//the server handle class support multi thread
ServerHandler serverHandler = new ServerHandler(client);
serverHandler.start();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
这种聊天程序至少也该用UDP吧