golang通过socket与java通讯

作为计算机专业的学生(虽然很水),直到今天还有二年级的师弟问我计算机专业学计算机网路基础究竟有什么作用?项目中是否只能用一门编程语言?……解释了半天,没能解释明白(原谅计算机专业读久了,口才真的变烂了),于是写下这篇文章
本文主要是实现echo服务器/客户端,服务器采用golang编写,客户端采用java编写(别问我为什么不用C++,如果会早就用了),本文的目的是为了说明,现代编程中,网络是十分重要的,另外一个项目中,不仅仅只能用一门编程语言,由于本人也是入门,写的不好地方,望指正,谢谢。有不懂的,可评论,下面上代码

//server.go
//客户端,主要是在9000端口创建监听程序,用于接受客户端连接
package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "time"
)

func main() {
    tcpAddr,err := net.ResolveTCPAddr("tcp","127.0.0.1:9000")
    if err != nil {
        log.Fatalln("地址解析错误",err)
    }
    tcpListener,err := net.ListenTCP("tcp",tcpAddr)    //创建监听
    if err != nil {
        log.Fatalln("地址监听失败",err)
    }

    defer tcpListener.Close()

    fmt.Println("开始接受客户端连接:")
    tcpConn,err := tcpListener.AcceptTCP()    //接受客户端连接
    if err != nil {
        log.Fatalln("接受客户端连接失败",err)
    }
    fmt.Println("客户端连接成功")
    _,err = tcpConn.Write([]byte("你好,我是服务器,欢迎连接!\n"))    //向客户端写数据
    if err != nil {
        log.Fatalln("往客户端数据失败",err)
    }
    reader := bufio.NewReader(tcpConn)

    for {
        line,err := reader.ReadString('\n')   //读取客户端发来的数据
        if err != nil {
            log.Fatalln("读取数据失败",err)
        }
        fmt.Println("客户端发来数据:",line)

        _,err = tcpConn.Write([]byte("我是服务器,我是服务器,收到请回答,收到请回答\n"))
        if err != nil {
            log.Fatalln("往客户端发送数据失败",err)
        }
        time.Sleep(1 * time.Second)    //延时一秒
    }
}
//Client.java
//主要是连接服务端的9000端口,然后读数据,写数据
package pri.guanlaolin.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

    private PrintWriter cout;
    private Socket socket;

    public Client() throws UnknownHostException,IOException,InterruptedException {
        // TODO Auto-generated constructor stub

        this.socket = new Socket("127.0.0.1",9000);   //连接服务器9000端口

        this.cout = new PrintWriter(socket.getOutputStream());
        this.cout.println("你好,我是客户端!");     //向服务器写入数据

        BufferedReader br = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));

        String line = "连接服务器成功";
        System.out.println(line);

        while (line != null) {
            line = br.readLine();     //读取服务器数据
            System.out.println(line);     
            this.cout.println("客户端收到,客户端收到");     //向服务器发送数据
            this.cout.flush();
            Thread.sleep(1000);    //延时1秒
        }
        br.close();
        this.cout.close();
        socket.close();
    }

    public static void main(String[] args) throws UnknownHostException,InterruptedException {
        // TODO Auto-generated method stub
        new Client();
    }

}

运行结果截图:
服务端
客户端

相关文章

程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息...
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简...
简介 默克尔树(MerkleTree)是一种典型的二叉树结构,其主要特点为: 最下面的叶节点包含存储数据或其...
接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本...
先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶...
第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装,...