实习第一周,由于后续的项目需要大量用到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聊天软件相关推荐

  1. 12.Java实现P2P聊天软件(服务器端实现)

    经过前面一段时间的学习,我们学习到了如何利用Socket实现各种功能. 下面,激动人心的时刻到了. 我们要对前面学习提纯的Demo进行综合利用,做出一款真正的聊天软件,这个聊天软件不仅可以发送消息,也 ...

  2. java仿qq_「java qq」仿QQ聊天软件java实现(一) - seo实验室

    java qq 之前学java通信的时候写过简单的通信程序,但比较简陋,于是重新写了一个仿照QQ的聊天软件,主要在界面上做了优化,增加了一些功能.实现的功能有注册.登录.好友列表.分组.黑名单.添加好 ...

  3. linux下udp实现聊天软件,socket实现一个简单的对话聊天软件

    socket可以在网络间进行通信, 基本上有两种通信协议, 一种是TCP, 一种是UDP. UDP是一种面向无链接的通信协议, 通信前无需与对端建立连接. 只要有目的ip地址和port端口, 就可以将 ...

  4. 基于java实现简单的QQ聊天通信功能

    数据存储结构 1.数据库设计 数据库是该即时通讯系统的中枢结构,进行信息处理的各个部分都是在数据库的基础上的,从而能够达成对于各类数据安全完整的存储,并进行合理的运用.有必要时可以设置数据字典,数据字 ...

  5. 毕设 JAVA JSP 简单的OICQ聊天程序论文

    备注原文来源于:六月雪计算机毕业设计 JAVA即时通讯工具JICQ的设计与开发 摘  要 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软 ...

  6. 【软件发布】eChat:一个非常简单的局域网聊天软件,完全开源!

    源码:https://github.com/BengbuGuards/eChat,下载地址也包含在内 一个非常简单的C/S型易语言程序,可以实现在同一局域网内聊天,并有传文件功能. 使用方法 在某一台 ...

  7. Java实现简单的在聊天面板中显示emoji

    前言 之前在实现显示emoji的功能的时候一直尝试使用JTextArea这个组件,尝试了各种办法,实现起来实在太困难了,如果重写graphics paint方法用于绘制图片表情的话,跟随显示的消息文字 ...

  8. java用socket和serversocket实现一对一聊天(java实现简单的TCP聊天程序)

    在上次发表类似文章的基础上做了一点手脚,这次可以直接运行两个控制台,不用再去用telnet IP端口了,这个可以直接在eclipse分别执行服务器端类和客户端类,然后在客户端和服务端上进行交互.更为方 ...

  9. java eclipse 简单的局域网聊天 webservice

     1.创建一个java project 项目,创建Client和Server 两个类 2.Client 类的内容 package web_service; import java.io.DataI ...

最新文章

  1. centos6 安装 mantisbt-1.2.8 —— (4)在CentOS6.4中安装配置LAMP环境
  2. Linux内核源码学习
  3. 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
  4. 并行DA实验c语言程序,哈工大C语言DA实验报告.doc
  5. swiper鼠标hover停止自动轮播_swiper滑块组件
  6. 摄像头取景框_苹果11的「超取景框拍摄照片」,很多人都不知道怎么用
  7. Java使用冒泡排序对数据进行排序,带注释
  8. vscode+cmake编译Telink Demo
  9. RAID磁盘阵列与磁盘阵列卡
  10. 九爷 带你玩转mysql引擎Mylsam
  11. html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作...
  12. 《Loy解说Eureka客户端源码(一)》
  13. S3DIS数据集解析为点云
  14. java word根据标识符替换图片,文字(亲测)
  15. 用C语言计算水分子的个数
  16. 英语面试问题及答案(转)
  17. win10 显卡更新后,屏幕亮度调节失效解决办法
  18. Pycharm mac 语法检测失效
  19. PVE虚拟化平台之安装iStoreOS软路由系统
  20. java 使用freemarker 导出word 和图片

热门文章

  1. 软件学院招生宣传视频工作日志——剧本讨论
  2. AutoML大赛夺魁!腾讯「太极伏羲队」在2022 CVPR NAS比赛中斩获冠军
  3. LR负载机设置:本地负载机和多台负载机
  4. 桌面文件夹计算机操作被限制,解决本次操作由于这台计算机的限制而被取消
  5. WDA 组件复用 ALV ON_CLICK事件
  6. WDA基础 弹窗 弹视图 报消息
  7. 音视频学习(十一)——H265视频码流
  8. WebService CXF系列: SpringBoot同一个项目中集成JaxWS和JaxRS
  9. PHP数组函数 count (计算数组中的元素数目)
  10. Android要凉了吗?其实只是你凉了