实习第一周,由于后续的项目需要大量用到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. Unity3D所使用的第三方工具
  2. mybatis学习笔记
  3. NppFTP小插件的使用
  4. 常用排序算法以及算法性能测试(完整C/C++代码实现)
  5. 【载誉】致远互联荣获“2017最佳协同管理解决方案”殊荣
  6. notify vs nofifyall
  7. python抢商品_python爬虫,抢小米抢购,
  8. MySQL分组求和GROUP BY
  9. 从一份外卖报告折射出的就业新选择
  10. CVE-2014-6271 “破壳“ 漏洞
  11. 什么叫最少拍计算机控制系统,最少拍无波纹计算机控制系统的一种综合方法.doc...
  12. CSS的3D应用:绘制长方体
  13. Android开发基础入门
  14. MPAndroidChart实现曲线阴影效果
  15. 前端webap下新增后缀名字类型。前台报错404,访问不到的解决办法是:
  16. 谷歌浏览器常用功能 去掉锁屏显示正在播放
  17. 32位和64位操作系统的区别
  18. 计算机科学phd,纽约大学计算机科学phd
  19. 电子版标书怎么做?有哪些特点?
  20. 6713EDMA总结(一)

热门文章

  1. Jupyter 常用扩展插件
  2. [每日问答]生成方法和判别方法有什么区别?
  3. 股市和期市是两种截然不同的市场机制 ——兼与徐小明先生商榷
  4. 【Proteus仿真】简易51单片机时钟,带闹钟功能,可调整时间
  5. 冥想于无限之上,融心智于无限
  6. JS时间戳转化为年月日格式2020-10-20 23:10:58
  7. 正确的承包商为你的房子装修。如何找到一个
  8. Matlab 2019a 与 Visual Studio 2017 联合编译
  9. spring+struts2+hibernate整合
  10. aix oracle 裸盘,AIX中创建的裸设备即AIX中的逻辑卷 for Oracle