- **
- * Created by Administrator on 13-12-9.
- */
- package main
- import (
- "fmt"
- "os"
- "net"
- )
- /**
- * 将string类型的ip地址转换为IP对象
- */
- func main() {
- name := "192.168.1.97"
- ip := net.ParseIP(name)
- if ip == nil {
- fmt.Fprintf(os.Stderr, "Err:无效的地址")
- return
- }
- fmt.Fprintf(os.Stdout, "IP: %s %s\n", ip, ip.String())
- defaultMask := ip.DefaultMask()
- fmt.Fprintf(os.Stdout, "DefaultMask: %s %s\n", defaultMask, defaultMask.String())
- ones, bits := defaultMask.Size()
- fmt.Fprintf(os.Stdout, "ones: %d bits: %d\n", ones, bits)
- }
-
/** * Created by Administrator on 13-12-9. */ package main import ( "fmt" "os" "net" ) /** * 将string类型的ip地址转换为IP对象 */ func main() { name := "192.168.1.97" ip := net.ParseIP(name) if ip == nil { fmt.Fprintf(os.Stderr, "Err:无效的地址") return } fmt.Fprintf(os.Stdout, "IP: %s %s\n", ip, ip.String()) defaultMask := ip.DefaultMask() fmt.Fprintf(os.Stdout, "DefaultMask: %s %s\n", defaultMask, defaultMask.String()) ones, bits := defaultMask.Size() fmt.Fprintf(os.Stdout, "ones: %d bits: %d\n", ones, bits) }
- /**
- * Created by Administrator on 13-12-9.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /**
- * 根据IP和掩码获得网络
- */
- func main() {
- name := "192.168.1.97"
- ip := net.ParseIP(name)
- mask := ip.DefaultMask()
- network := ip.Mask(mask)
- fmt.Fprintf(os.Stdout, "network: %s", network.String()) // 192.168.1.0
- // ip: 192.168.1.97
- // mask: 255.255.255.0
- // network: 192.168.1.0
- }
/**
* Created by Administrator on 13-12-9.
*/
package main
import (
"net"
"fmt"
"os"
)
/**
* 根据IP和掩码获得网络
*/
func main() {
name := "192.168.1.97"
ip := net.ParseIP(name)
mask := ip.DefaultMask()
network := ip.Mask(mask)
fmt.Fprintf(os.Stdout, "network: %s", network.String()) // 192.168.1.0
// ip: 192.168.1.97
// mask: 255.255.255.0
// network: 192.168.1.0
}
- /**
- * Created by Administrator on 13-12-9.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /**
- * 将域名解析Ip地址
- * 获得域名对应的所有Ip地址
- */
- func main() {
- domain := "www.baidu.com"
- ipAddr, err := net.ResolveIPAddr("ip", domain)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Err: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "%s IP: %s Network: %s Zone: %s\n", ipAddr.String(), ipAddr.IP, ipAddr.Network(), ipAddr.Zone)
- // 百度,虽然只有一个域名,但实际上,他对应电信,网通,联通等又有多个IP地址
- ns, err := net.LookupHost(domain)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Err: %s", err.Error())
- return
- }
- for _, n := range ns {
- fmt.Fprintf(os.Stdout, "%s", n) // 115.239.210.26 115.239.210.27 这2个地址打开都是百度
- }
- }
/**
* Created by Administrator on 13-12-9.
*/
package main
import (
"net"
"fmt"
"os"
)
/**
* 将域名解析Ip地址
* 获得域名对应的所有Ip地址
*/
func main() {
domain := "www.baidu.com"
ipAddr, err := net.ResolveIPAddr("ip", domain)
if err != nil {
fmt.Fprintf(os.Stderr, "Err: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "%s IP: %s Network: %s Zone: %s\n", ipAddr.String(), ipAddr.IP, ipAddr.Network(), ipAddr.Zone)
// 百度,虽然只有一个域名,但实际上,他对应电信,网通,联通等又有多个IP地址
ns, err := net.LookupHost(domain)
if err != nil {
fmt.Fprintf(os.Stderr, "Err: %s", err.Error())
return
}
for _, n := range ns {
fmt.Fprintf(os.Stdout, "%s", n) // 115.239.210.26 115.239.210.27 这2个地址打开都是百度
}
}
- /**
- * Created by Administrator on 13-12-9.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /**
- * 查看主机服务器(service)占用的端口,这些服务,都是tcp或者udp的
- */
- func main() {
- port, err := net.LookupPort("tcp", "telnet") // 查看telnet服务器使用的端口
- if err != nil {
- fmt.Fprintf(os.Stderr, "未找到指定服务")
- return
- }
- fmt.Fprintf(os.Stdout, "telnet port: %d", port)
- }
/**
* Created by Administrator on 13-12-9.
*/
package main
import (
"net"
"fmt"
"os"
)
/**
* 查看主机服务器(service)占用的端口,这些服务,都是tcp或者udp的
*/
func main() {
port, err := net.LookupPort("tcp", "telnet") // 查看telnet服务器使用的端口
if err != nil {
fmt.Fprintf(os.Stderr, "未找到指定服务")
return
}
fmt.Fprintf(os.Stdout, "telnet port: %d", port)
}
- /**
- * Created by Administrator on 13-12-9.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- func main() {
- // TCPAddr 包涵IP 和 Port
- // 将一个host地址转换为TCPAddr。host=ip:port
- pTCPAddr, err := net.ResolveTCPAddr("tcp", "www.baidu.com:80")
- if err != nil {
- fmt.Fprintf(os.Stderr, "Err: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "www.baidu.com:80 IP: %s PORT: %d", pTCPAddr.IP.String(), pTCPAddr.Port)
- }
/**
* Created by Administrator on 13-12-9.
*/
package main
import (
"net"
"fmt"
"os"
)
func main() {
// TCPAddr 包涵IP 和 Port
// 将一个host地址转换为TCPAddr。host=ip:port
pTCPAddr, err := net.ResolveTCPAddr("tcp", "www.baidu.com:80")
if err != nil {
fmt.Fprintf(os.Stderr, "Err: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "www.baidu.com:80 IP: %s PORT: %d", pTCPAddr.IP.String(), pTCPAddr.Port)
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- "io/ioutil"
- )
- func main() {
- url := "www.baidu.com:80"
- pRemoteTCPAddr, err := net.ResolveTCPAddr("tcp4", url)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- // pLocalTCPAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:7070")
- pTCPConn, err := net.DialTCP("tcp", nil/*pLocalTCPAddr*/, pRemoteTCPAddr)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- n, err := pTCPConn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- defer pTCPConn.Close()
- fmt.Fprintf(os.Stdout, "writed: %d\n", n)
- buf, err := ioutil.ReadAll(pTCPConn)
- r := len(buf)
- fmt.Fprintf(os.Stdout, string(buf[:r]))
- fmt.Fprintf(os.Stdout, "readed: %d\n", r)
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
"io/ioutil"
)
func main() {
url := "www.baidu.com:80"
pRemoteTCPAddr, err := net.ResolveTCPAddr("tcp4", url)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
// pLocalTCPAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:7070")
pTCPConn, err := net.DialTCP("tcp", nil/*pLocalTCPAddr*/, pRemoteTCPAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
n, err := pTCPConn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
defer pTCPConn.Close()
fmt.Fprintf(os.Stdout, "writed: %d\n", n)
buf, err := ioutil.ReadAll(pTCPConn)
r := len(buf)
fmt.Fprintf(os.Stdout, string(buf[:r]))
fmt.Fprintf(os.Stdout, "readed: %d\n", r)
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- "time"
- )
- func main() {
- pTCPAddr, error := net.ResolveTCPAddr("tcp4", ":7070")
- if error != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", error.Error())
- return
- }
- pTCPListener, error := net.ListenTCP("tcp4", pTCPAddr)
- if error != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", error.Error())
- return
- }
- defer pTCPListener.Close()
- for {
- pTCPConn, error := pTCPListener.AcceptTCP()
- if error != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", error.Error())
- continue
- }
- go connHandler(pTCPConn)
- }
- }
- func connHandler(conn *net.TCPConn) {
- defer conn.Close()
- now := time.Now()
- conn.Write([]byte(now.String() + "\n"))
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
"time"
)
func main() {
pTCPAddr, error := net.ResolveTCPAddr("tcp4", ":7070")
if error != nil {
fmt.Fprintf(os.Stdout, "Error: %s", error.Error())
return
}
pTCPListener, error := net.ListenTCP("tcp4", pTCPAddr)
if error != nil {
fmt.Fprintf(os.Stdout, "Error: %s", error.Error())
return
}
defer pTCPListener.Close()
for {
pTCPConn, error := pTCPListener.AcceptTCP()
if error != nil {
fmt.Fprintf(os.Stdout, "Error: %s", error.Error())
continue
}
go connHandler(pTCPConn)
}
}
func connHandler(conn *net.TCPConn) {
defer conn.Close()
now := time.Now()
conn.Write([]byte(now.String() + "\n"))
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- "time"
- )
- func main() {
- //url := "baidu.com:80"
- url := "facebook.com:80"
- conn, error := net.DialTimeout("tcp", url, time.Second * 10) // 带有超时限制的conn
- if error != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", error.Error())
- return
- }
- n , error := conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
- if error != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", error.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "writed: %d", n)
- buf := make([]byte, 2048)
- n, error = conn.Read(buf)
- if error != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", error.Error())
- return
- }
- fmt.Fprintf(os.Stdout, string(buf[:n]))
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
"time"
)
func main() {
//url := "baidu.com:80"
url := "facebook.com:80"
conn, error := net.DialTimeout("tcp", url, time.Second * 10) // 带有超时限制的conn
if error != nil {
fmt.Fprintf(os.Stderr, "Error: %s", error.Error())
return
}
n , error := conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
if error != nil {
fmt.Fprintf(os.Stderr, "Error: %s", error.Error())
return
}
fmt.Fprintf(os.Stdout, "writed: %d", n)
buf := make([]byte, 2048)
n, error = conn.Read(buf)
if error != nil {
fmt.Fprintf(os.Stderr, "Error: %s", error.Error())
return
}
fmt.Fprintf(os.Stdout, string(buf[:n]))
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /**
- * UDP 服务器
- */
- func main() {
- pUDPAddr, err := net.ResolveUDPAddr("udp", ":7070")
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- pUDPConn, err := net.ListenUDP("udp", pUDPAddr)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- defer pUDPConn.Close()
- for {
- buf := make([]byte, 256)
- n , pUDPAddr, err := pUDPConn.ReadFromUDP(buf)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "readed: %d", n)
- n, err = pUDPConn.WriteToUDP(buf, pUDPAddr)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "writed: %d", n)
- }
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
)
/**
* UDP 服务器
*/
func main() {
pUDPAddr, err := net.ResolveUDPAddr("udp", ":7070")
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
pUDPConn, err := net.ListenUDP("udp", pUDPAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
defer pUDPConn.Close()
for {
buf := make([]byte, 256)
n , pUDPAddr, err := pUDPConn.ReadFromUDP(buf)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "readed: %d", n)
n, err = pUDPConn.WriteToUDP(buf, pUDPAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "writed: %d", n)
}
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /**
- * UDP 客户端
- */
- func main() {
- pUDPAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:7070")
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error ResolveUDPAddr: %s", err.Error())
- return
- }
- pUDPConn, err := net.DialUDP("udp", nil, pUDPAddr)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error DialUDP: %s", err.Error())
- return
- }
- n, err := pUDPConn.Write([]byte("你好啊!!!"))
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error WriteToUDP: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "writed: %d", n)
- buf := make([]byte, 1024)
- n, _, err = pUDPConn.ReadFromUDP(buf)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error ReadFromUDP: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "readed: %d %s", n, string(buf[:n]))
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
)
/**
* UDP 客户端
*/
func main() {
pUDPAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:7070")
if err != nil {
fmt.Fprintf(os.Stderr, "Error ResolveUDPAddr: %s", err.Error())
return
}
pUDPConn, err := net.DialUDP("udp", nil, pUDPAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Error DialUDP: %s", err.Error())
return
}
n, err := pUDPConn.Write([]byte("你好啊!!!"))
if err != nil {
fmt.Fprintf(os.Stderr, "Error WriteToUDP: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "writed: %d", n)
buf := make([]byte, 1024)
n, _, err = pUDPConn.ReadFromUDP(buf)
if err != nil {
fmt.Fprintf(os.Stderr, "Error ReadFromUDP: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "readed: %d %s", n, string(buf[:n]))
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /*
- 很多时候,服务器会处理多个端口的监听!可以使用select轮询处理这种情况
- */
- func main() {
- lsr, err := net.Listen("tcp", ":7070")
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- for {
- conn , err := lsr.Accept()
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- continue
- }
- go connHandler(conn)
- }
- fmt.Println("Done !")
- }
- func connHandler(conn net.Conn) {
- defer conn.Close()
- var buf[512]byte
- for {
- n , err := conn.Read(buf[0:])
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- _, err = conn.Write(buf[0:n])
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- }
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
)
/*
很多时候,服务器会处理多个端口的监听!可以使用select轮询处理这种情况
*/
func main() {
lsr, err := net.Listen("tcp", ":7070")
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
for {
conn , err := lsr.Accept()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
continue
}
go connHandler(conn)
}
fmt.Println("Done !")
}
func connHandler(conn net.Conn) {
defer conn.Close()
var buf[512]byte
for {
n , err := conn.Read(buf[0:])
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
_, err = conn.Write(buf[0:n])
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
}
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- "bufio"
- )
- func main() {
- conn, err := net.Dial("tcp", "192.168.1.97:7070")
- if err != nil {
- fmt.Sprint(os.Stderr, "Error: %s", err.Error())
- return
- }
- go func() {
- var buf [512]byte
- for {
- n , err := conn.Read(buf[0:])
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, string(buf[0:n]))
- }
- }()
- for {
- fmt.Fprintf(os.Stdout, "\n输入:")
- pReader := bufio.NewReader(os.Stdin)
- line, _, err := pReader.ReadLine()
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
- return
- }
- conn.Write(line[0:])
- }
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
"bufio"
)
func main() {
conn, err := net.Dial("tcp", "192.168.1.97:7070")
if err != nil {
fmt.Sprint(os.Stderr, "Error: %s", err.Error())
return
}
go func() {
var buf [512]byte
for {
n , err := conn.Read(buf[0:])
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, string(buf[0:n]))
}
}()
for {
fmt.Fprintf(os.Stdout, "\n输入:")
pReader := bufio.NewReader(os.Stdin)
line, _, err := pReader.ReadLine()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
return
}
conn.Write(line[0:])
}
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- )
- /**
- UDP Server
- */
- func main() {
- packetConn, err := net.ListenPacket("udp", ":7070")
- if err != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
- return
- }
- defer packetConn.Close()
- var buf [512]byte
- for {
- n , addr, err := packetConn.ReadFrom(buf[0:])
- if err != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))
- _, err = packetConn.WriteTo(buf[0:n], addr)
- if err != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
- return
- }
- }
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
)
/**
UDP Server
*/
func main() {
packetConn, err := net.ListenPacket("udp", ":7070")
if err != nil {
fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
return
}
defer packetConn.Close()
var buf [512]byte
for {
n , addr, err := packetConn.ReadFrom(buf[0:])
if err != nil {
fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))
_, err = packetConn.WriteTo(buf[0:n], addr)
if err != nil {
fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
return
}
}
}
- /**
- * Created by Administrator on 13-12-10.
- */
- package main
- import (
- "net"
- "fmt"
- "os"
- "time"
- )
- /**
- UDP Client
- */
- func main() {
- conn, err := net.Dial("udp", "127.0.0.1:7070")
- if err != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
- return
- }
- defer conn.Close()
- _, err = conn.Write([]byte("你好啊UDP"))
- if err != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
- return
- }
- var buf [512]byte
- conn.SetReadDeadline(time.Now().Add(time.Second * 1)) // 阻塞,直到接收到消息,设置阻塞时间1秒
- n, err := conn.Read(buf[0:])
- if err != nil {
- fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
- return
- }
- fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))
- }
/**
* Created by Administrator on 13-12-10.
*/
package main
import (
"net"
"fmt"
"os"
"time"
)
/**
UDP Client
*/
func main() {
conn, err := net.Dial("udp", "127.0.0.1:7070")
if err != nil {
fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
return
}
defer conn.Close()
_, err = conn.Write([]byte("你好啊UDP"))
if err != nil {
fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
return
}
var buf [512]byte
conn.SetReadDeadline(time.Now().Add(time.Second * 1)) // 阻塞,直到接收到消息,设置阻塞时间1秒
n, err := conn.Read(buf[0:])
if err != nil {
fmt.Fprintf(os.Stdout, "Error: %s", err.Error())
return
}
fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))
}