go-TCP编程

这篇具有很好参考价值的文章主要介绍了go-TCP编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网路编程知识(端口)

0号是保留端口

1-1024是固定端口(22:SSH远程连接;23:telnet使用;21:ftp使用;25:smtp服务使用; 80:iis使用; 7:echo使用)

端口注意事项
  1. 在计算机(尤其是服务器)要尽量少开端口
  2. 一个端口只能被一个程序监听
  3. 如果使用netstat -an可以查看本机有哪些端口在监听
  4. 可以使用netstat -anb来查看监听端口的pid,再结合任务管理器关闭不安全的端口

tcp socket编程的客户端和服务器端

tcp是长期连接

服务端的处理流程
  1. 监听端口8888
  2. 接收客户端的tcp链接,建立客户端和服务器端的连接
  3. 创建goroutine(协程),处理该连接的请求(通常客户端会通过链接发送请求包)
客户端的处理流程
  1. 建立与服务器的链接
  2. 发送请求数据,接收服务器端返回的结果数据
  3. 关闭连接
服务器监听
//采用的包
package net

go-TCP编程
go-TCP编程

我们使用的API是``
go-TCP编程

//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)

go-TCP编程

Accept

go-TCP编程

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
go-TCP编程
连接成功后会一直判断连接

准备协程,为客户端

telnet www.bilibili,com 80
‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

go-TCP编程
go-TCP编程
go-TCP编程

重启电脑

完整代码
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())
		}
	}

	
}

go-TCP编程

go-TCP编程文章来源地址https://www.toymoban.com/news/detail-403419.html

到了这里,关于go-TCP编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux编程中查看TCP监听的端口和连接

    netstat命令是一个网络工具,可以显示网络连接、路由表和网络接口等信息。使用以下命令可以查看当前的TCP监听端口和连接: -t 显示TCP协议的连接情况 -l:显示监控中的服务器的socket。 -n 以数字形式显示IP地址和端口号。 ss(Socket Statistics)命令是一个更快速和更强大的替代

    2024年02月06日
    浏览(33)
  • Go语言网络编程(socket编程)TCP

    TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。 TCP服务端 一个TCP服务端可以同时连接很

    2024年02月09日
    浏览(34)
  • Go语言TCP Socket编程

    Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP

    2024年02月15日
    浏览(28)
  • Go语言网络编程(socket编程)TCP粘包

    服务端代码如下: 客户端代码如下: 将上面的代码保存后,分别编译。先启动服务端再启动客户端,可以看到服务端输出结果如下: 收到client发来的数据: Hello, Hello. How are you?Hello, Hello. How are you?Hello, Hello. How are you?Hello, Hello. How are you?Hello, Hello. How are you? 收到client发来的数

    2024年02月09日
    浏览(44)
  • Linux tcp/ip 网路协议栈学习-00 前言

    Linux tcp/ip 网路协议栈学习-00 前言 目录 Linux  tcp/ip 网路协议栈学习-00 前言 (1)预备知识  (2)前置知识 (3)学习目标 (4)总结     (1)预备知识  好工具事半功倍,做任何事情都需要有方法和工具,同样,阅读 Linux 内核源码也是如此。由于当前内核源码非常庞大,学习上,不能一

    2024年04月26日
    浏览(29)
  • Go语言实战:网络编程与TCP_UDP

    Go语言是一种现代的编程语言,由Google的Robert Griesemer、Rob Pike和Ken Thompson于2009年开发。Go语言的设计目标是简单、高效、可扩展和易于使用。它具有垃圾回收、类型安全、并发性能等优点。Go语言的网络编程库 net 包提供了TCP/UDP的实现,使得开发者可以轻松地编写网络应用程序

    2024年02月21日
    浏览(44)
  • Go语言的网络编程与TCP_IP

    Go语言是一种现代的编程语言,由Google的Robert Griesemer、Rob Pike和Ken Thompson在2009年开发。Go语言的设计目标是简单、高效、可扩展和易于使用。它具有弱类型、垃圾回收、并发性和原生支持的网络编程。Go语言的网络编程是其强大功能之一,它使得开发者可以轻松地编写高性能的

    2024年02月22日
    浏览(51)
  • 【群晖Nas开启WebDAV服务,路由器映射端口,实现Win10远程映射网路驱动器】

    登录群晖,在套件中心里搜索并安装WebDAV Server。 启用http与https端口,并点击应用。 进入路由器设置页面,映射相应端口,保存并重启路由。 在win10中,按Win+R打开运行,输入regedit打开注册表,并找到“计算机HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters”,打开

    2024年02月05日
    浏览(44)
  • 网络编程 tcp udp http编程流程 网络基础知识

    OSI分层:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip: 应用层 传输层 网络层 数据链路 ip地址:唯一标识一台主机 ipv4 32位 ipv6 128位 寻址 可以反映物理上的一个变化 MAC地址:48 固化在计算机中 ip地址又两部分构成:网络号+主机号 端口号:标识一个应用程序

    2024年02月13日
    浏览(56)
  • 网络编程:TCP粘包问题——各层粘包/拆包、Nagle 算法、Go实现长度字段协议解决TCP粘包、使用TCP的应用层协议设计

    1.1 TCP介绍 如上图,TCP具有面向连接、可靠、基于字节流三大特点。 字节流可以理解为一个双向的通道里流淌的数据,这个数据其实就是我们常说的二进制数据,简单来说就是一大堆 01 串。纯裸TCP收发的这些 01 串之间是没有任何边界的,你根本不知道到哪个地方才算一条完

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包