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. Java 根据Date计算年龄

  2. ASP Session 对象

    http://www.w3school.com.cn/asp/asp_sessions.asp

  3. SDUT OJ 数据结构上机测试1:顺序表的应用

    数据结构上机测试1:顺序表的应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  4. 如何让ie8地址栏下拉框里不显示历史记录和收藏夹

    打开浏览器,点击IE浏览器上方工具——Internet选项——内容——自动完成的设置——地址栏里面的勾勾去掉,浏览历史记录和收藏夹里面的东西就自动没有了

  5. js 简单数据类型和复杂数据类型的区别

    原始数据类型: number,string,boolean,undefined, null,object 基本类型(简单类型),值类型: number,string,boolean 复杂类型(引用类型 ...

  6. 洛谷 P1372 又是毕业季I

    可能所有的数论题都是这样玄学.... 题目链接:https://www.luogu.org/problemnew/show/P1372 这道题通过暴力的枚举可以发现是不可做的(当然我也不会做) 然后就 ...

  7. HDOJ3085 Nightmare II 双向BFS

    重构一遍就A了...但这样效率太低了...莫非都要重构???QWQ 每一秒男同志bfs3层,女同志bfs1层.注意扩展状态时,要判一下合不合法再扩展,而不是只判扩展的状态合不合法,否则有可能由非法的走 ...

  8. 【贪心】洛谷 P1199 三国游戏 题解

     这个题尽管题目长,主要还是证明贪心的正确性(与博弈关系不大) 题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战 ...

  9. ZOJ - 3624

    当A连向C,B连向D时存在相交路径 #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<=k;i++) #define ...

  10. [转] Java:对Scanner的useDelimiter()方法的疑问

    [From]https://segmentfault.com/q/1010000003885362 Windows下,我们在键盘上按下Enter键,实际上输入的是回车和换行两个字符:\r\n,ASCI ...