SocketTool工具(模擬開發(fā)板)和基于socket的java服務(wù)器(TCP/IP協(xié)議)開發(fā)

之前接手要寫一個(gè)代碼和開發(fā)板聯(lián)調(diào),一臉蒙.對(duì)我來說跟硬件一起開發(fā)真的很頭疼.之前了解過一點(diǎn)socket沒成想這次用上了

開發(fā)板想要跟后臺(tái)聯(lián)調(diào)不能用我們平時(shí)軟件聯(lián)調(diào)用的http協(xié)議,只能用TCP/IP協(xié)議或UDP/IP協(xié)議.這里用socket技術(shù),

有關(guān)TCP/IP,UDP/IP協(xié)議等七層協(xié)議各位可以百度一下,我就不做介紹了,因?yàn)槲乙矝]搞懂.但這并不影響我開發(fā).

第一步搭建一個(gè)Springboot項(xiàng)目在我簡(jiǎn)書里已經(jīng)寫了,地址:

http://www.reibang.com/p/12da23fcc4c2
1.在pom.xml中加載日志Lombok依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>washCarProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <!--springboot的parent-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>

    </parent>
    <!--springboot的web支持-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      

        <!--日志配置,采用這個(gè)日志不用每次都去初始化log變量-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>
      
    </dependencies>
    <build>
        <plugins>
            <!--Springboot插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.invengo.washCar.WashCarApplication</mainClass>
                </configuration>
            </plugin>

        </plugins>
    </build>


</project>

2.創(chuàng)建一個(gè)服務(wù)器

@Slf4j
public class Server
{
    public void getServerDemo() throws Exception
    {

        ServerSocket server = new ServerSocket(8099);//設(shè)置服務(wù)器端口號(hào)
        System.out.println("服務(wù)器開啟,等到客戶端鏈接------------------   ");//服務(wù)器開啟時(shí)控制臺(tái)輸出
        while (true) {
            Socket socket = server.accept();
            new Agent(socket).start();
        }
    }

    class Agent extends Thread
    {
        Socket socket = null;

        public Agent(Socket soc)
        {
            this.socket = soc;
        }

        public void run()
        {
            try {
                InputStream in = socket.getInputStream();
                OutputStream out = socket.getOutputStream();
                out.write("welcome to Server!\0".getBytes());//給客戶端返回信息告知其鏈接成功
                out.flush();
                byte[] bytes = null;
                while (true){
                bytes = new byte[58];//大小可更改
                in.read(bytes);
                System.out.println("客戶端來消息"+ Arrays.toString(bytes));//由于這里是跟開發(fā)板做鏈接所以全部都必須輸入輸出為二進(jìn)制才可以,所以無論傳輸?shù)氖鞘裁炊家D(zhuǎn)換成二進(jìn)制的形式      
                log.info(Arrays.toString(bytes));      //將客戶的消息記錄日志
                }
            } catch (Exception e) {
                System.err.println(e);//也可以寫成e.printStackTrace();
            }

        }
    }
}

3.在開啟類中調(diào)用Socket類

@Slf4j
@SpringBootApplication
public class SocketrApplication extends SpringBootServletInitializer
{

    public static void main(String[] args)
    {
        SpringApplication.run(SocketrApplication.class, args);
       Server server = new Server();
        try {
            server.getServerDemo();//調(diào)用開啟服務(wù)器
        } catch (Exception e) {
            log.error(e.getMessage());//記錄日志
//            e.printStackTrace();
        }
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
    {
        return builder.sources(this.getClass());
    }
}

4.這樣可以開啟程序運(yùn)行一下,服務(wù)器開啟,控制臺(tái)輸出


5.打開TPC/IP調(diào)試工具鏈接服務(wù)器,這個(gè)工具大家可以去網(wǎng)上搜,我的是我們硬件同事給我的所以沒有連接


ff2.png

記得要選擇TCP Client這個(gè)選項(xiàng)來創(chuàng)建客戶端


ff3.png

上圖可見自己的ip和服務(wù)器端口.點(diǎn)擊連接,開始連接服務(wù)器,連接成功后可以再數(shù)據(jù)提示框看到服務(wù)器發(fā)送過來的的信息
ff6.png

這樣就連接成功了
然后在數(shù)據(jù)發(fā)送框中輸入測(cè)試數(shù)據(jù)點(diǎn)擊發(fā)送


ff6.png
ff7.png

發(fā)送成功會(huì)在數(shù)據(jù)提示 窗口中看到自己發(fā)送的數(shù)據(jù)
并且在服務(wù)器的控制臺(tái)可以看到服務(wù)器接收到的數(shù)據(jù)


ff8.png

這樣就表示連接成功了,至于開發(fā)板當(dāng)中的程序是硬件同事寫的所以我就不知道了,這部分調(diào)試通了后硬件同事用socket技術(shù)在他那邊寫好程序燒在板子上連接IP和端口就可以向服務(wù)器發(fā)送消息了.

一般這種使用情況會(huì)放在一個(gè)特定的服務(wù)器,所以需要你把項(xiàng)目部署在其他的服務(wù)器,那么可以有如下
首先把項(xiàng)目打包因?yàn)槌绦蚴呛?jiǎn)單的jar包所以


ff9.png

打包以后利用Xshell和Xftp放置在服務(wù)器的某個(gè)目錄下
然后在服務(wù)器的終端里輸入命令
由于我在代碼中設(shè)置了其默認(rèn)端口是8094,服務(wù)器端口號(hào)8095,所以首先需要確認(rèn)這兩個(gè)端口在你部署的服務(wù)器中沒有被占用.
如果被占用則需要更改,服務(wù)器的端口在代碼中更改,程序的默認(rèn)在配置application.properties中更改


ff10.png

這里面把配置server.port=8094后面的端口在即改,改完后在打包

沒有被占用的話就可以先用命令
cd /jar包所在目錄
然后運(yùn)行jar包三種方式

1.java -jar xxxx.jar    這種方式實(shí)時(shí)監(jiān)控但是退出時(shí)程序自動(dòng)關(guān)閉
2.java -jar xxxx.jar  &  這種方式不實(shí)時(shí)監(jiān)控退出時(shí)程序不會(huì)關(guān)閉
3..java -jar xxxx.jar>socket.log & 這種方式不實(shí)時(shí)監(jiān)控,日志輸出到日志socket.log中可以再這里查看

查看日志的幾種方式
1.cat  xxx.log 從第一行查看
2.tail -f xxx.log 最后十行實(shí)時(shí)查看,這個(gè)比較適合我們單片機(jī)這邊查看調(diào)試.---------------推薦

這里如果運(yùn)行java -jar xxx.jar出現(xiàn)問題參考鏈接:
http://www.reibang.com/p/db5f7b130501
我在這里整理了我遇到的問題如果,你還有別的問題請(qǐng)留言提出,我們共同探討

這里插播一個(gè)日志的配置
這里我用的配置是lombok
這里需要先安裝插件(因?yàn)槲疫@里已經(jīng)安裝了所以搜索有,沒有的先在Browse repositories里面搜索lombok進(jìn)行安裝)


55.png

安裝完成后重啟idea然后在pom.xml中加入依賴

   <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>

然后在你需要記錄日志的類前加入@Slf4j
這樣你在代碼中就直接可以調(diào)用log不用聲明變量了.

log.info(日志內(nèi)容);
log.error(日志內(nèi)容);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躬充,一起剝皮案震驚了整個(gè)濱河市何荚,隨后出現(xiàn)的幾起案子孕荠,更是在濱河造成了極大的恐慌墩瞳,老刑警劉巖哩至,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件览妖,死亡現(xiàn)場(chǎng)離奇詭異瘾杭,居然都是意外死亡站蝠,警方通過查閱死者的電腦和手機(jī)汰具,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱魔,“玉大人留荔,你說我怎么就攤上這事±骄耄” “怎么了聚蝶?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵杰妓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我碘勉,道長(zhǎng)巷挥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任验靡,我火速辦了婚禮倍宾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胜嗓。我一直安慰自己凿宾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布兼蕊。 她就那樣靜靜地躺著初厚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孙技。 梳的紋絲不亂的頭發(fā)上产禾,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音牵啦,去河邊找鬼亚情。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哈雏,可吹牛的內(nèi)容都是我干的楞件。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼裳瘪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼土浸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彭羹,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤黄伊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后派殷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體还最,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年毡惜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拓轻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡经伙,死狀恐怖扶叉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤辜梳,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布粱甫,位于F島的核電站泳叠,受9級(jí)特大地震影響作瞄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜危纫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一宗挥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧种蝶,春花似錦契耿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盯滚,卻和暖如春踢械,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魄藕。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工内列, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人背率。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓话瞧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寝姿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子交排,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的饵筑,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,077評(píng)論 6 174
  • 個(gè)人認(rèn)為个粱,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,060評(píng)論 0 8
  • 計(jì)算機(jī)網(wǎng)絡(luò)概述 網(wǎng)絡(luò)編程的實(shí)質(zhì)就是兩個(gè)(或多個(gè))設(shè)備(例如計(jì)算機(jī))之間的數(shù)據(jù)傳輸翻翩。 按照計(jì)算機(jī)網(wǎng)絡(luò)的定義都许,通過一定...
    蛋炒飯_By閱讀 1,231評(píng)論 0 10
  • 網(wǎng)絡(luò)編程 網(wǎng)絡(luò)編程對(duì)于很多的初學(xué)者來說,都是很向往的一種編程技能嫂冻,但是很多的初學(xué)者卻因?yàn)楹荛L(zhǎng)一段時(shí)間無法進(jìn)入網(wǎng)絡(luò)編...
    程序員歐陽(yáng)閱讀 2,017評(píng)論 1 37
  • 名詞延伸 通俗的說,域名就相當(dāng)于一個(gè)家庭的門牌號(hào)碼,別人通過這個(gè)號(hào)碼可以很容易的找到你钱雷。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,607評(píng)論 2 57