zoukankan      html  css  js  c++  java
  • (原创)小程序设计(二)一起来聊天吧!

      又过了一天,迎来了周末,然而本人仍然心心念念着如何对代码进行更加详细的测试,于是就吃完中午饭马上跑来实验室用媳妇儿的电脑进行测试了。

      主要测试的预期就是,两台电脑之间运行代码后能够聊天,本来以为很简单呢,谁知道到处是坑,于是就费了好几个小时不断出现问题然后解决问题,不断出现bug然后分析代码,对代码也进行了一系列的修改,最终达到了想要的效果,为了对程序进行更一步的优化,特此记录下来,也为了之后经常复习,有几部分知识也是边研究边学习的,所以以后还可能会用到。那么,就总结一下啦:

      1.首先考虑的是,两台电脑如何进行通信呢,作为通信专业的学生,在本科的学习中都已经知道了,用两根网线把两台电脑一连,然后配成相同网段的IP地址,就可以实现两机通信,但是由于自己找的一根网线实在是太短了,而且觉得这种方式有点low,所以就考虑无线的 方式。

      2.无线方式,当然只需要一个路由器就行了。由于没有TP-LINK,就想着拿自己的手机开热点,然后本人电脑和媳妇儿的电脑(只有简称为主机1和主机2)都连到这个手机热点上,那么网段肯定是一样的,实际测试的时候,手机网关地址是192.168.43.1,主机1地址是192.168.43.56,主机2地址是192.168.43.49,这个时候讲道理主机1和主机2互相之间应该可以ping通,但这个时候拿主机1去ping主机2的IP地址是不通的。

      3.为了解决两机互通的问题,查阅到的方法也就是两个原因:防火墙和工作组。首先,通过控制面板-系统和安全-系统-参看该计算机的名称,这里可以看到工作组的名称,当然可以修改,主机1和主机2工作组名称都是一样的因此就不需要修改了。然后,通过控制面板-查看网络状态和任务-Windows Defender防火墙-启用或关闭防火墙-关闭防火墙,这样就可以完成关闭防火墙的操作。(但是奇葩的是,主机2的防火墙正常关闭,主机1的防火墙却因为装了什么迈克菲杀毒软件而托管了防火墙的开关权,所以本人一气之下怒卸迈克菲,实际也没什么影响,然后舒舒服服地关闭我的防火墙,哼!),在关闭防火墙之后,两个主机之间就可以正常ping通了。(开心啊!)

      4.考虑在主机2上配置环境。首先去官网上下载了JDK,因为运行Java程序是一定要装的,然后配置好环境变量,即添加JAVA_HOME和添加path就可以了,通过cmd中运行javac和java命令,可以看到安装成功。(这部分貌似不需要写这么详细。)

      5.考虑在主机2上运行程序。首先本人很呆萌地直接就拷了一个客户端窗口Java文件,准备直接cmd中javac一下,现在想想自己脑袋真的短路了嘛,后来才反应过来,仅仅一个Java文件,连实现类文件都没有你跑啥,连这那都没有你跑啥。然后又想,能不能拷一个Eclipse过去,反正又不是安装版,又觉得这也不是长久之计啊。最后在一番学习后,生成了可执行jar包,主要过程是:

      右键项目-Export-Runnable JAR file-Next,然后出现这个界面:设置启动文件和路径,就可以生成可执行文件了。

      6.首先在主机1上运行服务器端程序,然后在主机2上运行jar包,通过cmd执行

    java -jar 路径+jar包

      这样程序可以运行了,但是出现了一个问题,输入主机1的IP地址,发现网络无法连接,于是就很郁闷。

      于是就拿自己的主机1运行客户端程序,发现输入服务器IP地址的时候,输入127.0.0.1可以连接,但是输入主机1IP地址192.168.43.56时就无法连接。

      查阅了很多资料后,总结出,第一,确保防火墙关闭,这一点很确定了;第二,创建服务器套接字的时候只绑定了端口号,这个时候就会默认绑定到127.0.0.1的回环地址,这样输入本机IP当然连接不上,这里的详细知识就不细讲了。

      然后,只要将服务器套接字绑定到0.0.0.0就可以使服务器监听所有与指定端口有关的IP地址访问了。

      于是,修改服务器创建套接字代码,将默认地址绑定到了0.0.0.0:

    try {
                // 开启服务器,并绑定到8023端口
                ss = new ServerSocket();
                ss.bind(new InetSocketAddress("0.0.0.0", 8023));
                System.out.println("服务器已启动!");
            } catch (IOException e) {
                e.printStackTrace();
            }

       修改完成之后,主机1客户端就可以了,主机2客户端程序也可以进去了。

      7,进去之后又遇到了问题,中文显示和输入输出都是乱码,这里因为主机1的程序是eclipse指定的utf-8,而主机2默认编码是GBK,这个时候当然出现了乱码,解决的方法时执行jar包时指定编码格式。

    java -Dfile.encoding=utf-8 -jar 路径+jar包

      然后解决了问题,可以连接进去并且不再出现中文乱码的情况了。

      8.最后就只有一个问题了,就是背景图片无法显示的问题。这里又遇到了两个问题。

      (1)首先用WinRAR打开第一版制作的可执行jar包,查看里面的内容,会发现打包jar包的时候,只会讲src下面的文件打包进去,并没有包含背景图片呀,所以就不显示背景了。

      然后我把背景图片文件夹移到src文件夹下,并修改代码中的路径,最后发现还是不行啊。

      (2)最后,通过修改加载图片代码,使用绝对路径,并使用如下方法,可以将图片打包到jar中。

    public backgroundJPanel2() {
                img = new ImageIcon(getClass().getResource("/background/Me.jpg")).getImage();
                setPreferredSize(new Dimension(713, 583));
                this.setOpaque(false);
                this.setLayout(new BorderLayout());
            }

      查看最新jar包中的文件,发现已经成功地将图片文件夹和图片打包到了jar包中。

       

  • 相关阅读:
    C++中两种获取UUID的方法(编程)
    在python中发送自定义消息
    lib,dll的位置
    GetWindowText
    SuspendThread and ResumeThread
    创建线程检查按钮的状态
    C++检测句柄的权限
    POJ2186 强联通
    POJ2186 强联通
    POJ 1201 差分约束(集合最小元素个数)
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9029597.html
Copyright © 2011-2022 走看看