server.java

 import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.*; @SuppressWarnings("serial")
public class Server extends JFrame {
DataInputStream inputFromClient;
DataOutputStream outputToClient;
// Button for send massage
private JButton jbSend = new JButton("Send");
// Text area for displaying contents
private JTextArea jta = new JTextArea();
// Text field for receiving radius
private JTextField jtf = new JTextField();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String time = format.format(d); public static void main(String[] args) {
new Server();
} public Server() {
// Place text area on the frame
setLayout(new BorderLayout());
add(new JScrollPane(jta), BorderLayout.CENTER);
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Message"), BorderLayout.WEST);
p.add(jtf, BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
p.add(jbSend, BorderLayout.EAST);
add(p, BorderLayout.SOUTH);
jtf.addActionListener(new ButtonListener()); // Register listener
jbSend.addActionListener(new ButtonListener()); // Register listener
setTitle("Server");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); // It is necessary to show the frame here! try {
// Create a server socket
ServerSocket serverSocket = new ServerSocket(8001);
jta.append(" ***Server started at " + time +"***"+ '\n'); // Listen for a connection request
Socket socket = serverSocket.accept(); // Create data input and output streams
inputFromClient = new DataInputStream(socket.getInputStream());
outputToClient = new DataOutputStream(socket.getOutputStream()); while (true) {
// Receive message from the client
String message = inputFromClient.readUTF();
jta.append(" " + time + '\n');
jta.append(" Message: " + message + '\n');
}
} catch (IOException ex) {
jta.append(" ***端口已被占用!*** " + '\n');
}
} public class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
// Get the message from the text field
String message = jtf.getText().trim(); // Send the radius to the server
outputToClient.writeUTF(message);
outputToClient.flush(); // Display to the text area
jta.append(" " + time + '\n');
jta.append(" MyMessage: " + message + "\n");
jtf.setText(null);
} catch (IOException ex) {
System.err.println(ex);
}
}
} }

client.java

 import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; @SuppressWarnings("serial")
public class Client extends JFrame {
// Text field for receiving message
private JTextField jtf = new JTextField(); // Text area to display contents
private JTextArea jta = new JTextArea();
// Button for send massage
private JButton jbSend = new JButton("Send");
// IO streams
private DataOutputStream toServer;
private DataInputStream fromServer;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String time = format.format(d); public static void main(String[] args) {
new Client();
} public Client() {
// Panel p to hold the label and text field
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Message"), BorderLayout.WEST);
p.add(jtf, BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
p.add(jbSend, BorderLayout.EAST);
setLayout(new BorderLayout());
add(p, BorderLayout.SOUTH);
add(new JScrollPane(jta), BorderLayout.CENTER); jtf.addActionListener(new ButtonListener()); // Register listener
jbSend.addActionListener(new ButtonListener()); // Register listener setTitle("Client");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); // It is necessary to show the frame here! try {
// Create a socket to connect to the server
Socket socket = new Socket("localhost", 8001); // Create an input stream to receive data from the server
fromServer = new DataInputStream(socket.getInputStream()); // Create an output stream to send data to the server
toServer = new DataOutputStream(socket.getOutputStream()); while (true) {
// Get message from the server
String message2 = fromServer.readUTF();
jta.append(" " + time + '\n');
jta.append(" Message: " + message2 + '\n');
}
} catch (IOException ex) {
jta.append(" ***连接服务器失败!*** "+ '\n');
}
} public class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
// Get the message from the text field
String message = jtf.getText().trim(); // Send the message to the server
toServer.writeUTF(message);
toServer.flush(); // Display to the text area
jta.append(" " + time + '\n');
jta.append(" MyMessage: " + message + "\n");
jtf.setText(null);
} catch (IOException ex) {
System.err.println(ex);
}
}
}
}

下载链接: http://pan.baidu.com/s/1mgBKGdU 密码: hkje

java版两人聊天程序的更多相关文章

  1. Java版多人聊天室

    server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...

  2. java swing+socket实现多人聊天程序

    swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...

  3. java小程序---简陋版多人聊天室

    功能需求: 1 每运行一次主函数,创建一个客户端聊天界面; 2 客户端界面分三块,公屏(显示所有客户端发送的信息),私屏(用于输入个人想要发送的信息),发送按钮(点击一次,将客户端信息发送到服务端) ...

  4. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  5. Java使用socket实现两人聊天对话

    import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /* ...

  6. Java的两个实验程序

    日期:2018.10.07 星期五 博客期:015 Part1:----------------第一个是二柱子出30道小学数学题: 一.程序设计思想 本程序设计由三部分构成,第一部分因为循环30次的需 ...

  7. Java网络编程--简单聊天程序

    背景 毕业设计前的练手,学校小比赛中的一个题目. 开发环境 Java(eclipse)+Mysql 简介 使用Java+Mysql开发以个简单的聊天工具,在本次项目中实现了: 1. 用户登录(客户端至 ...

  8. 即时通讯UI-聊天界面(UITableView显示左右两人聊天)

    目录 1.创建UITableView对象并设置相关属性 2.创建cellModel模型 //枚举类型 typedef enum { ChatMessageFrom = ,//来自对方的消息 ChatM ...

  9. Oracle Berkeley DB Java 版

    Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...

随机推荐

  1. 【AGC010F】Tree Game 博弈论+暴力

    Description ​ 有一棵nn个节点的树,第ii条边连接ai,biai,bi,每个节点ii上有AiAi个石子,高桥君和青木君将在树上玩游戏 ​ 首先,高桥君会选一个节点并在上面放一个棋子,然后 ...

  2. Centos7.4 更换国内yum源

    1.进入yum源配置文件夹.(配置之前先看看有没有安装wget命令呢,没的话可以先用当前的yum源安装一下再说.yum -y install wget) 2.转到配置文件目录  cd /etc/yum ...

  3. C++_函数1-编程的基本模块函数

    以下是<C++ Primer Plus>中第七章的内容: 使用C++函数的3个步骤: 提供函数定义 提供函数原型 调用函数 7.1.1 定义函数 函数分成两类:没有返回值的函数.有返回值的 ...

  4. 【原创】SpringMVC同一RequestMapping返回不同的类型

    曾经在工作中遇到过导出文件时,需要根据不同情况返回不同的数据的情况. 例如: 如果没有数据,弹框提示"没有数据" 导出报错,弹框提示"系统错误" 正常情况下,下 ...

  5. 加、减、乘、除 高精度 string

    #include<stdio.h> #include<string> #include<string.h> #include<iostream> usi ...

  6. Codeforces - 185A 简单矩阵快速幂

    题意:求第n个三角形内部的上三角形个数 对每个三角形分别维护上下三角形个数,记为\(dp[1][i],dp[2][i]\) 规律很明显是 \(dp[1][i+1]=3*dp[1][i]+dp[2][i ...

  7. Android 调整图标和字体大小

    1. Root 2. 进system,找到build.prop 3. 用RE管理器,编辑 ro.sf.lcd_density=320, 后面的数值随意调整,越大图标越大,不要太贪心,图标变大会显示不全 ...

  8. 【研究】struts2-045漏洞

    攻击者可以通过构造HTTP请求头中的Content-Type值可能造成远程代码执行. 工具: K8(链接:https://pan.baidu.com/s/1kVxgFNx 密码:ygxf) Tomca ...

  9. Android应用捕获全局异常自定义处理

    [2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_s ...

  10. oracle基础知识(六)----spfile与pfile

    一, 认识参数文件      Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的,决定了数据库的物理 结构.内存.数据库的限制及系统大量的默认值 ...