Java实现简单的P2P聊天软件
实习第一周,由于后续的项目需要大量用到socket方面的知识,导师第一周给的任务是写一个设计一个基于最基本Socket的P2P“聊天软件”(文本互传),要求在同一个网关内可以通过任意常用端口建立会话并进行socket通讯、双向文本收发。于是开始了面向百度编程。
socket这一块搞的晕头转向,最后好歹也是明白了
不知道是什么问题最后运行还是Connection refused: connect
搜了一堆都说断口冲突了,但是改了端口还是连不上 求大神解答
//服务端
package com.fang;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;public class Server extends JFrame implements ActionListener {// 属性// frame组件//private JFrame jFrame;// 文本区private JTextArea jTextArea;// 滚动条private JScrollPane jScrollPane;//面板 → (文本框 + 发送按钮)private JPanel jPanel;private JTextField jTextField;private JButton jButton;private BufferedWriter bufferedWriter;private static int serverPort;static {Properties properties = new Properties();try {properties.load(new FileReader("chat.properties"));serverPort = Integer.parseInt(properties.getProperty("serverPort"));} catch (IOException e) {throw new RuntimeException(e);}}//方法//构造方法public Server() {// 文本区放入滑动组件jTextArea = new JTextArea();// 自动滚动 + 不可编辑jTextArea.setAutoscrolls(true);jTextArea.setEditable(false);jScrollPane = new JScrollPane(jTextArea);// 好像不能这么写// jScrollPane.add(jTextArea);// 按钮+文本框 放入 panel 组件 分别放在东西两侧jButton = new JButton("SEND");jTextField = new JTextField(20);jPanel = new JPanel();jPanel.add(jTextField, BorderLayout.WEST);jPanel.add(jButton, BorderLayout.EAST);// 滚动组件 + panel 添加到 frame 组件 并滚动组件放到中间,panel放到南部this.add(jPanel, BorderLayout.SOUTH);this.add(jScrollPane, BorderLayout.CENTER);// 标题 尺寸this.setTitle("对话-服务端");this.setSize(500, 400);this.setLocation(600, 300);// 设置事件 静态方法 当jframe关闭时触发对象结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//TCP协议// 给按钮绑定监听事件jButton.addActionListener(this);try {// 1. 创建套接字 选择一个端口-6666ServerSocket serverSocket = new ServerSocket(serverPort);// 2. 等待客户端连接 返回socket对象Socket socket = serverSocket.accept();// System.out.println("连接完成");// 3. 获取socket 先获取输入流 然后获取输入流读取对象 最后使用BufferedReader 对象逐行获取输入InputStream inputStream = socket.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line = bufferedReader.readLine();while (line != null) {jTextArea.append(line + System.lineSeparator());}// 4. 输出流OutputStream outputStream = socket.getOutputStream();OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);bufferedWriter = new BufferedWriter(outputStreamWriter);// 4. 关掉套接字serverSocket.close();} catch (IOException e) {throw new RuntimeException(e);}}/*** Invoked when an action occurs.** @param e the event to be processed*/@Overridepublic void actionPerformed(ActionEvent e) {//System.out.println("我被点击");//获取文本框输入的内容String text = jTextField.getText();text = "SERVER: " + text;//在自己的文本区显示jTextArea.append(text);//实现发送// Connection refused: connect 无法实现 bufferedWriter 对象的使用try {bufferedWriter.write(text);bufferedWriter.newLine(); //换行bufferedWriter.flush(); //刷新jTextField.setText("");} catch (IOException ex) {throw new RuntimeException(ex);}}
}
//客户端
package com.fang;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;
import java.util.Properties;public class Client extends JFrame implements ActionListener {// 属性// frame组件//private JFrame jFrame;// 文本区private JTextArea jTextArea;// 滚动条private JScrollPane jScrollPane;//面板 → (文本框 + 发送按钮)private JPanel jPanel;private JTextField jTextField;private JButton jButton;private BufferedWriter bufferedWriter;private static int clientPort;static {try {Properties properties = new Properties();FileReader fileReader = new FileReader("chat.properties");properties.load(fileReader);clientPort = Integer.parseInt(properties.getProperty("clientPort"));} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}//方法//构造方法public Client() {// 文本区放入滑动组件jTextArea = new JTextArea();// 自动滚动 + 不可编辑jTextArea.setAutoscrolls(true);jTextArea.setEditable(false);jScrollPane = new JScrollPane(jTextArea);// 好像不能这么写// jScrollPane.add(jTextArea);// 按钮+文本框 放入 panel 组件 分别放在东西两侧jButton = new JButton("SEND");jTextField = new JTextField(20);jPanel = new JPanel();jPanel.add(jTextField, BorderLayout.WEST);jPanel.add(jButton, BorderLayout.EAST);// 滚动组件 + panel 添加到 frame 组件 并滚动组件放到中间,panel放到南部this.add(jPanel, BorderLayout.SOUTH);this.add(jScrollPane, BorderLayout.CENTER);// 标题 尺寸this.setTitle("对话-客户端");this.setSize(500, 400);this.setLocation(600, 300);// 设置事件 静态方法 当jframe关闭时触发对象结束this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//TCP协议// 给SEND按钮绑定监听点击事件jButton.addActionListener(this);try {// 1. 创建套接字 选择一个端口-6666/*Socket socket = new Socket();*/// 2. 创建socket对象 实现与服务端连接Socket socket = new Socket("127.0.0.1", clientPort);// 3. 获取socket 先获取输入流 然后获取输入流读取对象 最后使用BufferedReader 对象逐行获取输入InputStream inputStream = socket.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line = bufferedReader.readLine();while (line != null) {jTextArea.append(line + System.lineSeparator());}// 4. 输出流OutputStream outputStream = socket.getOutputStream();OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);bufferedWriter = new BufferedWriter(outputStreamWriter);// 4. 关掉套接字socket.close();} catch (IOException e) {throw new RuntimeException(e);}}/*** Invoked when an action occurs.** @param e the event to be processed*/@Overridepublic void actionPerformed(ActionEvent e) {//System.out.println("我被点击");//获取文本框输入的内容String text = jTextField.getText();text = "CLIENT: " + text;//在自己的文本区显示jTextArea.append(text);//实现发送// Connection refused: connect 无法实现 bufferedWriter 对象的使用try {bufferedWriter.write(text);bufferedWriter.newLine(); //换行bufferedWriter.flush(); //刷新jTextField.setText("");} catch (IOException ex) {throw new RuntimeException(ex);}}/*public Client(JTextArea jTextArea, JScrollPane jScrollPane01, JPanel jPanel, JTextField jTextField, JButton jButton) {this.jTextArea = jTextArea;this.jScrollPane = jScrollPane01;this.jPanel = jPanel;this.jTextField = jTextField;this.jButton = jButton;}*/
}
Java实现简单的P2P聊天软件相关推荐
- 12.Java实现P2P聊天软件(服务器端实现)
经过前面一段时间的学习,我们学习到了如何利用Socket实现各种功能. 下面,激动人心的时刻到了. 我们要对前面学习提纯的Demo进行综合利用,做出一款真正的聊天软件,这个聊天软件不仅可以发送消息,也 ...
- java仿qq_「java qq」仿QQ聊天软件java实现(一) - seo实验室
java qq 之前学java通信的时候写过简单的通信程序,但比较简陋,于是重新写了一个仿照QQ的聊天软件,主要在界面上做了优化,增加了一些功能.实现的功能有注册.登录.好友列表.分组.黑名单.添加好 ...
- linux下udp实现聊天软件,socket实现一个简单的对话聊天软件
socket可以在网络间进行通信, 基本上有两种通信协议, 一种是TCP, 一种是UDP. UDP是一种面向无链接的通信协议, 通信前无需与对端建立连接. 只要有目的ip地址和port端口, 就可以将 ...
- 基于java实现简单的QQ聊天通信功能
数据存储结构 1.数据库设计 数据库是该即时通讯系统的中枢结构,进行信息处理的各个部分都是在数据库的基础上的,从而能够达成对于各类数据安全完整的存储,并进行合理的运用.有必要时可以设置数据字典,数据字 ...
- 毕设 JAVA JSP 简单的OICQ聊天程序论文
备注原文来源于:六月雪计算机毕业设计 JAVA即时通讯工具JICQ的设计与开发 摘 要 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软 ...
- 【软件发布】eChat:一个非常简单的局域网聊天软件,完全开源!
源码:https://github.com/BengbuGuards/eChat,下载地址也包含在内 一个非常简单的C/S型易语言程序,可以实现在同一局域网内聊天,并有传文件功能. 使用方法 在某一台 ...
- Java实现简单的在聊天面板中显示emoji
前言 之前在实现显示emoji的功能的时候一直尝试使用JTextArea这个组件,尝试了各种办法,实现起来实在太困难了,如果重写graphics paint方法用于绘制图片表情的话,跟随显示的消息文字 ...
- java用socket和serversocket实现一对一聊天(java实现简单的TCP聊天程序)
在上次发表类似文章的基础上做了一点手脚,这次可以直接运行两个控制台,不用再去用telnet IP端口了,这个可以直接在eclipse分别执行服务器端类和客户端类,然后在客户端和服务端上进行交互.更为方 ...
- java eclipse 简单的局域网聊天 webservice
1.创建一个java project 项目,创建Client和Server 两个类 2.Client 类的内容 package web_service; import java.io.DataI ...
最新文章
- centos6 安装 mantisbt-1.2.8 —— (4)在CentOS6.4中安装配置LAMP环境
- Linux内核源码学习
- 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
- 并行DA实验c语言程序,哈工大C语言DA实验报告.doc
- swiper鼠标hover停止自动轮播_swiper滑块组件
- 摄像头取景框_苹果11的「超取景框拍摄照片」,很多人都不知道怎么用
- Java使用冒泡排序对数据进行排序,带注释
- vscode+cmake编译Telink Demo
- RAID磁盘阵列与磁盘阵列卡
- 九爷 带你玩转mysql引擎Mylsam
- html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作...
- 《Loy解说Eureka客户端源码(一)》
- S3DIS数据集解析为点云
- java word根据标识符替换图片,文字(亲测)
- 用C语言计算水分子的个数
- 英语面试问题及答案(转)
- win10 显卡更新后,屏幕亮度调节失效解决办法
- Pycharm mac 语法检测失效
- PVE虚拟化平台之安装iStoreOS软路由系统
- java 使用freemarker 导出word 和图片
热门文章
- 软件学院招生宣传视频工作日志——剧本讨论
- AutoML大赛夺魁!腾讯「太极伏羲队」在2022 CVPR NAS比赛中斩获冠军
- LR负载机设置:本地负载机和多台负载机
- 桌面文件夹计算机操作被限制,解决本次操作由于这台计算机的限制而被取消
- WDA 组件复用 ALV ON_CLICK事件
- WDA基础 弹窗 弹视图 报消息
- 音视频学习(十一)——H265视频码流
- WebService CXF系列: SpringBoot同一个项目中集成JaxWS和JaxRS
- PHP数组函数 count (计算数组中的元素数目)
- Android要凉了吗?其实只是你凉了