go 网络编程
网络编程
tcp
1.tcp客户端服务端实现
server/server.go
package main import (
"fmt"
"net"
) /*
tcp客户端服务端实现
*/ func process(conn net.Conn){
//这里我们循环接收客户端发送的消息
defer conn.Close() for{
//创建一个新的切片
buf:=make([]byte,)
//conn.Read(buf)
//1.等待客户端通过conn发送消息
//2.如果客户端没有write[发送],那么协程就阻塞在这里
fmt.Printf("服务器在等待客户端%s 发送消息\n",conn.RemoteAddr().String())
n,err:=conn.Read(buf)//从conn读取
if err!=nil{
fmt.Printf("客户端退出 err=%v",err)
return
}
//3.显示客户端发送的内容,到服务器的终端
fmt.Print(string(buf[:n]))
}
} func main(){
fmt.Println("服务器开始监听。。")
//net.Listen("tcp","0.0.0.0:8888")
listen,err:=net.Listen("tcp","0.0.0.0:8888")
if err!=nil{
fmt.Println("listen err=",err)
return
}
defer listen.Close()//延时关闭listen //循环等待客户端连接
for{
//等待客户端连接
fmt.Println("等待客户端")
conn,err:=listen.Accept()
if err!=nil{
fmt.Println("Accept() en=",err)
}else{
fmt.Printf("Accept() suc con=%v 客户端ip=%v\n",conn,conn.RemoteAddr().String())
}
//这里准备一个协程,为客户端服务
go process(conn)
}
fmt.Printf("listen suc=%v\n",listen)
}
client/client.go
package main import (
"bufio"
"fmt"
"net"
"os"
"strings"
) func main(){
conn,err:=net.Dial("tcp","192.168.1.107:8888")
if err!=nil{
fmt.Println("client dial err=",err)
return
}
//功能一:客户端可以发送单行数据,然后就退出
reader:=bufio.NewReader(os.Stdin)//os.Stdin 代表标准输入终端
for{ //从服务端读取一行用户输入,并准备发送给服务器
line,err:=reader.ReadString('\n')
if err!=nil{
fmt.Println("readString err=",err)
}
line=strings.Trim(line,"\r\n")
if line=="exit"{
fmt.Println("客户端退出。。。")
break
}
//再将line发送给服务器
n,err:=conn.Write([]byte(line))
if err!=nil{
fmt.Println("conn.Write err=",err)
}
fmt.Printf("客户端发送了%d字节的数据",n) }
}
2.
go 网络编程的更多相关文章
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- 浅谈C#网络编程(一)
阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- Java - 网络编程
Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh. 参考:
- Linux网络编程-IO复用技术
IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了.Linux中,提 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- iOS网络编程
今天的重点是UIWebView.NSURLSession.JSon. 网络编程联网准备:1.在Info.plist中添加AppTransportSecurity类型Dictionary:2.在AppT ...
随机推荐
- Linux中inode详解
转自:https://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在 ...
- k8s概述
k8s概述 概述 Kubernetes 使你在数以千计的电脑节点上运行软件时就像所有这些节点是单个大节点一样.它将底层基础设施抽象,这样做同时简化了应用的开发.部署, 以及对开发和运维团队的管理. K ...
- 对于n!的快速质因数分解
N!的阶乘的质因数分解 对于N的阶乘 比如8! 我们要算其中一个质因数出现次数 我们注意到 8!=1 2 3 4 5 6 7 8 1 1 1 1 2的倍数出现的次数8/2=4 1 1 4的倍数出现的次 ...
- JVM源码分析-JVM源码编译与调试
要分析JVM的源码,结合资料直接阅读是一种方式,但是遇到一些想不通的场景,必须要结合调试,查看执行路径以及参数具体的值,才能搞得明白.所以我们先来把JVM的源码进行编译,并能够使用GDB进行调试. 编 ...
- 倒转数组 Leetcode189
倒转数组 Leetcode189 记录调整数组顺序而不需要另加内存的一种方法: 题目 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [ ...
- git远程上传文件至github
一.本地安装和配置git 1.安装git pacman -S git //如果没有问题的话就可以安装成功了 2.验证 git --version //看到结果git version 2.10.2就可以 ...
- ICC中对Skew进行Debug的好工具--Interactive CTS Window
本文转自:自己的微信公众号<集成电路设计及EDA教程> 以后打算交替着推送多种EDA工具的教程而不只是单纯针对某个工具,依次来满足不同粉丝的需求. 这里分享一篇多年之前写的推文,虽然时间 ...
- 秒秒钟破解eval加密
前言 准确的说eval处理过的代码应该叫做压缩代码,不过效果上算是加密过了一样!很多小伙伴不想直接让别人看到自己的js代码往往就会采取这样的处理措施.不过,其实这样的方法只能防御那些小白.对于真正的 ...
- 安卓开发实战-记账本APP(六)
记账本APP开发---终结篇 昨天的动态数字录屏奉上:在抖音上拍了一个(ps:欢迎点赞) https://v.douyin.com/poEjmG/ 今天将图表的内容进行了制作,我用的是MPChart的 ...
- GTMD并查集!
徐州的A我因为并查集写错T了整场.. int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); } GTMD!