一、引言
本文将展示如何使用Go语言搭建一个简易的TCP服务器,该服务器能够接收客户端的请求,下载PDF文件到指定目录。由于Go语言的标准库不支持直接操作Windows打印机,我们将不实现打印功能。
二、环境准备
1. Go语言环境
2. Git(用于版本控制)
三、代码实现
以下是使用Go语言实现的TCP服务器代码:
```go
package main
import (
"encoding/json"
"fmt"
"io"
"net"
"net/http"
"os"
"path/filepath"
"strings"
)
const (
host = "127.0.0.1"
port = "12345"
baseDir = "./pdfs"
)
type Response struct {
Status string `json:"status"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
func startTCPServer(host string, port string) {
l, err := net.Listen("tcp", host+":"+port)
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
defer l.Close()
fmt.Println("TCP server is listening on", host+":"+port)
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
continue
}
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
defer conn.Close()
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
requestParams := string(buf[:n])
fmt.Println("Received request:", requestParams)
var response Response
if strings.HasPrefix(requestParams, "downloadpdf:") {
pdfURL := strings.TrimPrefix(requestParams, "downloadpdf:")
err := downloadPDF(pdfURL, baseDir)
if err != nil {
response = Response{"error", "Failed to download PDF", nil}
} else {
response = Response{"success", "PDF downloaded successfully", nil}
}
} else {
response = Response{"error", "Invalid request", nil}
}
respBytes, _ := json.Marshal(response)
conn.Write(respBytes)
}
func downloadPDF(pdfURL string, baseDir string) error {
resp, err := http.Get(pdfURL)
if err != nil {
return err
}
defer resp.Body.Close()
pdfName := filepath.Base(pdfURL)
pdfPath := filepath.Join(baseDir, pdfName)
out, err := os.Create(pdfPath)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, resp.Body)
return err
}
func main() {
startTCPServer(host, port)
}
```
四、总结
本文通过Go语言实现了一个简易的TCP服务器,该服务器能够接收客户端的请求,下载PDF文件到指定目录。由于Go语言的标准库不支持直接操作Windows打印机,因此我们没有实现打印功能。在实际应用中,可以根据需求对代码进行优化和扩展,以满足更多场景的需求。
希望本文对您有所帮助,如有疑问,请随时留言交流。
使用Go语言搭建简易TCP服务器,实现PDF文件远程下载功能
最新推荐文章于 2025-05-09 13:49:25 发布