1.TCPCONN
在TCP连接中,服务端是一个标准的listen和accept结构
在net包中有一个TCPConn类,用它来作为客户端和服务器交互的通道
func (c *TCPConn) Write(b []byte) (n int, err os.Error)
func (c *TCPConn) Read(b []byte) (n int, err os.Error)
通过TCPConn的write和read来实现在客户端和服务器之间读写数据
那么怎样获得一个地址呢?
func ResolveTCPAddr(net, addr string) (*TCPAddr, os.Error),返回一个TCPAddr的结构指针
对于ResloveTCPAddr中的net可以选择tcp4 tcp6或tcp;;addr表示的是服务器的url或者IP地址
获取完地址后,需要建立tcp监听
net.ListenTCP(“tcp”, tcpAddr) 参数分别为net和地址
然后就可以获取tcp连接
tcpListener.AcceptTCP() 返回的是一个TCPCoon类型,通过read和write读取数据
package main
import (
"fmt"
"net"
"os"
)
func main() {
var tcpAddr *net.TCPAddr
tcpAddr, _ = net.ResolveTCPAddr("tcp", "localhost:8080")
var tcpListener, _ = net.ListenTCP("tcp", tcpAddr)
defer tcpListener.Close()
fmt.Println("Server ready to read ...")
for {
tcpConn, err := tcpListener.AcceptTCP()
if err != nil {
fmt.Println("accept error:", err)
continue
}
fmt.Println("A client connected : " + tcpConn.RemoteAddr().String())
b:=make([]byte,1024)
tcpConn.Read(b)
a,_:=os.Create("./pengpeng.txt")
a.Write(b)
a.Close()
}
}
通过这个例子我们可以把请求头写到文件里面
而对于客户端,我们刚刚说过需要通过dail来进行连接
还是一样的,我们需要先获取tcpaddr
tcpAddr, _ = net.ResolveTCPAddr(“tcp”, “127.0.0.1:999”)
然后建立连接
conn, err := net.DialTCP(“tcp”, nil, tcpAddr)
然后在对conn的信息进行处理
package main
import (
"fmt"
"net"
"os"
)
func main() {
var tcpAddr *net.TCPAddr
tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:8081")
conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil {
fmt.Println("Client connect error ! " + err.Error())
return
}
defer conn.Close()
fmt.Println(conn.LocalAddr().String() + " : Client connected!")
}