作为计算机专业的学生(虽然很水),直到今天还有二年级的师弟问我计算机专业学计算机网路基础究竟有什么作用?项目中是否只能用一门编程语言?……解释了半天,没能解释明白(原谅计算机专业读久了,口才真的变烂了),于是写下这篇文章。
本文主要是实现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,
IOException, InterruptedException {
// TODO Auto-generated method stub
new Client();
}
}
运行结果截图:
服务端
客户端