java版两人聊天程序
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版两人聊天程序的更多相关文章
- Java版多人聊天室
server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...
- java swing+socket实现多人聊天程序
swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...
- java小程序---简陋版多人聊天室
功能需求: 1 每运行一次主函数,创建一个客户端聊天界面; 2 客户端界面分三块,公屏(显示所有客户端发送的信息),私屏(用于输入个人想要发送的信息),发送按钮(点击一次,将客户端信息发送到服务端) ...
- Java网络编程——UDP聊天程序
UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...
- Java使用socket实现两人聊天对话
import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /* ...
- Java的两个实验程序
日期:2018.10.07 星期五 博客期:015 Part1:----------------第一个是二柱子出30道小学数学题: 一.程序设计思想 本程序设计由三部分构成,第一部分因为循环30次的需 ...
- Java网络编程--简单聊天程序
背景 毕业设计前的练手,学校小比赛中的一个题目. 开发环境 Java(eclipse)+Mysql 简介 使用Java+Mysql开发以个简单的聊天工具,在本次项目中实现了: 1. 用户登录(客户端至 ...
- 即时通讯UI-聊天界面(UITableView显示左右两人聊天)
目录 1.创建UITableView对象并设置相关属性 2.创建cellModel模型 //枚举类型 typedef enum { ChatMessageFrom = ,//来自对方的消息 ChatM ...
- Oracle Berkeley DB Java 版
Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...
随机推荐
- 洛谷P4724 【模板】三维凸包
题面 传送门 题解 先理一下关于立体几何的基本芝士好了--顺便全都是从\(xzy\)巨巨的博客上抄来的 加减 三维向量加减和二维向量一样 模长 \(|a|=\sqrt{x^2+y^2+z^2}\) 点 ...
- 洛谷P2766 最长不下降子序列问题(最大流)
传送门 第一问直接$dp$解决,求出$len$ 然后用$f[i]$表示以$i$为结尾的最长不下降子序列长度,把每一个点拆成$A_i,B_i$两个点,然后从$A_i$向$B_i$连容量为$1$的边 然后 ...
- Centos查看端口占用令
Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令: lsof -i tcp:80 列出所有端口 netstat -ntlp 1.开启端口(以80端口为例) 方法一: /sbin/ ...
- js 对象 浅拷贝 和 深拷贝
网上发现一个比较好的博客 阮一峰的感觉很不错推荐大家看看. http://www.ruanyifeng.com/blog/it/javascript/ 接下来看一下这两个拷贝方法 1.浅拷贝 拷贝就是 ...
- 在执行 Database.SqlQuery Method (String, Object[]) 执行中出现错误
执行类似于 var params = new SqlParameter[]{--}; Database.SqlQuery<Type>(sql1,params); Dat ...
- Python学习【第五篇】:面向对象及相关
面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 1 2 3 4 5 6 c ...
- [WebShow系列] 现场控制台操作方法
正在制作......,敬请期待. 现场控制台操作方法 现场控制台是现场管理员的管理后台.现场管理员首先登录指定的网址.使用现场管理员指定的登录名及密码就可以登录到后台.在后台点击[WebShow现场控 ...
- requirejs重点
1.shim:用于配置不是通过define函数包装的文件,导出什么东西,如果这个文件不再baseURL目录下的话,需要在paths中配置文件目录.并且paths中的键名.shim中的键名.requir ...
- redux超易学三篇之三(一个逻辑完整的react-redux)
配合源代码学习吧~ : 我是源代码 这一分支讲的是 如何完整地(不包含优化,也没有好看的页面) 搭建一个 增删改查 的 react-redux 系统 不同于上一节的 react-redux,这里主要采 ...
- HDU - 1403 后缀数组初步
题意:求两个串的最长公共子串 两个串连接起来然后求高度数组 注意两个sa值必须分别在不同一侧 本题是用来测试模板的,回想起青岛那次翻车感觉很糟糕 #include<iostream> #i ...