网路编程知识(端口)
0号是保留端口
1-1024是固定端口(
22
:SSH远程连接;23
:telnet使用;21
:ftp使用;25
:smtp服务使用;80
:iis使用;7
:echo使用)
端口注意事项
- 在计算机(尤其是服务器)要尽量少开端口
- 一个端口只能被一个程序监听
- 如果使用
netstat -an
可以查看本机有哪些端口在监听 - 可以使用
netstat -anb
来查看监听端口的pid,再结合任务管理器关闭不安全的端口
tcp socket编程的客户端和服务器端
tcp是长期连接
服务端的处理流程
- 监听端口8888
- 接收客户端的tcp链接,建立客户端和服务器端的连接
- 创建goroutine(协程),处理该连接的请求(通常客户端会通过链接发送请求包)
客户端的处理流程
- 建立与服务器的链接
- 发送请求数据,接收服务器端返回的结果数据
- 关闭连接
服务器监听
//采用的包
package net
我们使用的API是``
//0.0.0.0:8888:这样写IPV4和IPV6都支持
listen,err := net.Listen("tcp","127.0.0.1:8888")
if err != nil {
fmt.Printf("listen err=%v\n",err)
return
}
fmt.Printf("listen success = %v\n",listen)
Accept
Read()
,Write
,Close()
,LocalAddr()
,RemoteAddr()
用的特别多;
//循环等待客户端来连接
for{
//等待客户端来连接
fmt.Println("等待客户端连接...")
conn,err :=listen.Accept()
if err != nil {
fmt.Println("Accept() error")
}else {
fmt.Printf("Accept() success = %v\n",conn)
}
}
我们访问127.0.0.1:8888
连接成功后会一直判断连接
准备协程,为客户端
telnet www.bilibili,com 80
‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
重启电脑
完整代码
package main
import (
"fmt"
"net" //做网络socket开发时
)
func main(){
fmt.Println("服务器开始监听...")
//0.0.0.0:8888:这样写IPV4和IPV6都支持
listen,err := net.Listen("tcp","127.0.0.1:8888")
if err != nil {
fmt.Printf("listen err=%v\n",err)
return
}
fmt.Printf("listen success = %v\n",listen)
defer listen.Close()//延时关闭连接
//循环等待客户端来连接
for{
//等待客户端来连接
fmt.Println("等待客户端连接...")
conn,err :=listen.Accept()
if err != nil {
fmt.Println("Accept() error")
}else {
fmt.Printf("Accept() success = %v\n",conn)
}
}
//准备协程,为客户端
}
服务器接收客户端消息
客户端
package main
import (
"fmt"
"net"
)
func Link(){
conn,err := net.Dial("tcp","127.0.0.1:8888")
if err != nil {
fmt.Println("connect error")
return
}
fmt.Printf("connect success = %v",conn)
}
func main(){
Link()
}
服务端
package main
import (
"fmt"
"net" //做网络socket开发时
)
func main(){
fmt.Println("服务器开始监听...")
//0.0.0.0:8888:这样写IPV4和IPV6都支持
listen,err := net.Listen("tcp","127.0.0.1:8888")
if err != nil {
fmt.Printf("listen err=%v\n",err)
return
}
fmt.Printf("listen success = %v\n",listen)
defer listen.Close()//延时关闭连接
//循环等待客户端来连接
for{
//等待客户端来连接
fmt.Println("等待客户端连接...")
conn,err :=listen.Accept()
if err != nil {
fmt.Println("Accept() error")
}else {
//查看客户端的ip地址
fmt.Printf("Accept() success = %v,客户端ip地址=%v\n",conn,conn.RemoteAddr())
}
}
}
文章来源:https://www.toymoban.com/news/detail-403419.html
文章来源地址https://www.toymoban.com/news/detail-403419.html
到了这里,关于go-TCP编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!