socket 實現的 web 伺服器在 Windows 下的讀寫問題
用 socket 實現了個簡陋的 web 伺服器。這段程式碼在 Linux 和 Mac 下執行都是正常的,通過瀏覽器都可以能響應 “Hello world!”;但是在 Windows 下執行時,通過瀏覽器訪問會報錯 “This site can’t be reached The connection was reset.”。
// socket 實現的簡單 web 伺服器
package main
import (
"log"
"net"
"os"
)
var content = []byte("HTTP/1.1 200 OK\r\nContent-type:text/plain\r\n\r\nHello world!")
func handleConn(conn net.Conn) {
conn.Write(content)
defer conn.Close()
}
func main() {
addr := "localhost:10000"
listener, err := net.Listen("tcp", addr)
checkErr(err)
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal(err)
continue
}
go handleConn(conn)
}
}
func checkErr(err error) {
if err != nil {
log.Fatal(err)
os.Exit(1)
}
}
後來我把 handleConn 函式修改了一下:
func handleConn(conn net.Conn) {
var buf = make([]byte, 1024) // buf 要確保所有資料都讀出來了
_, err := conn.Read(buf)
checkErr(err)
conn.Write(content)
defer conn.Close()
}
改完之後,在 Linux, Mac 和 Windows 下都可以響應 “Hello world!” 了。也就是說在 Windows 系統下必須把連線裡的位元組全部讀取之後才可以,而在 Linux 和 Mac 下則讀不讀都可以。不知道這是我的程式碼問題還是說由於系統的原因必須要這樣寫,又或者是其它原因?
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Netty實現Web SocketNettyWeb
- Tomcat實現Web SocketTomcatWeb
- Spring Boot實現Web SocketSpring BootWeb
- socket在python下的使用Python
- 從零手寫實現 tomcat-03-基本的 socket 實現Tomcat
- 記一次 Nuxt 3 在 Windows 下的打包問題UXWindows
- php原生socket之IO多路複用以及實現web伺服器PHPWeb伺服器
- epoll+socket實現 socket併發 linux伺服器Linux伺服器
- 解決在Windows 11下Visual Studio部分快捷鍵失效的問題Windows
- Kotlin + Netty 在 Android 上實現 Socket 的服務端KotlinNettyAndroid服務端
- TCP socket和web socket的區別TCPWeb
- 在Windows環境下使用NodeJS的fast-glob不正確執行的問題WindowsNodeJSAST
- windows下pip install xx 遇到的 ConnectionResetError問題WindowsError
- [20180420]windows下使用cmd的小問題.txtWindows
- git Windows下重新命名檔案,大小寫敏感問題GitWindows
- 【Mongo】Mongo讀寫分離的實現Go
- node的讀寫流簡易實現
- socket的半包,粘包與分包的問題
- 線上MySQL讀寫分離,出現寫完讀不到問題如何解決MySql
- 寫個 .NET 程式解決 Windows 版微信 3.9 收到檔案“只讀”的問題Windows
- 【開發遇到的問題】java web專案在引用伺服器靜態資源中文亂碼問題JavaWeb伺服器
- Mysql(MyISAM)的讀寫互斥鎖問題的解決方法MySql
- JUC之讀寫鎖問題
- 解決java socket在傳輸漢字時出現截斷導致亂碼的問題Java
- Windows下ElasticSearch安裝中的問題解決WindowsElasticsearch
- Kubernetes 中實現 MySQL 的讀寫分離MySql
- 基於Sharding-Jdbc 實現的讀寫分離實現JDBC
- 【MQTT】在Windows下搭建MQTT伺服器MQQTWindows伺服器
- MQTT在Windows下搭建MQTT伺服器MQQTWindows伺服器
- 【詳解】換一個角度看Socket的資料讀寫
- 在IDEA下使用JUnit出現的問題與解決辦法Idea
- socket程式設計中常見的概念問題!程式設計
- Vagrant 在 Windows 下的使用Windows
- 客戶端(windows)訪問FTP伺服器遇到的問題(總結)客戶端WindowsFTP伺服器
- Windows on Arm 下的 Inline Hook 簡單實現WindowsinlineHook
- Linux伺服器部署Web版VSCode,在window下使用瀏覽器在linux環境下編寫程式碼Linux伺服器WebVSCode瀏覽器
- 關於利用go實現非同步讀寫的寫法分享Go非同步
- C# 實現socket通訊程式(伺服器端)C#伺服器