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 ...
随机推荐
- 在 Ubuntu 上安装 K8S教程
在 Ubuntu 上安装 K8S教程 1,更新系统源 如果系统本身自带得镜像地址,服务器在国外,下载速度会很慢,可以打开 /etc/apt/sources.lis 替换为国内得镜像源. apt upg ...
- Leetcode 题目整理-8 Count and Say
38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows: 1, 11 ...
- .net core3.1 webapi + vue.js + axios实现跨域
我所要讲述的是,基于.net core3.1环境下的webapi项目,如何去使用axios对接前端的vue项目 既然谈到axios,这里贴出axios的官方文档地址: http://www.axios ...
- CUDA学习(七)之使用CUDA内置API计时
问题:对于使用GPU计算时,都想知道kernel函数运行所耗费的时间,使用CUDA内置的API可以方便准确的获得kernel运行时间. 在CPU上,可以使用clock()函数和GetTickCount ...
- BIO、NIO
1. BIO和NIO 我们平常使用的IO是BIO(Blocking-IO),即阻塞IO.而NIO(No-blocking-IO)则是非阻塞IO,二者有什么区别呢? 预先知识准备 同步:发起调用后,调用 ...
- 小米重新上锁[BL]
解锁一时爽,bug火葬场.废话不多说,直接上教程. 首先安装 线刷工具:http://bigota.d.miui.com/tools/MiFlash2018-5-28-0.zip 解锁工具:http: ...
- Codeforces_460_B
http://codeforces.com/problemset/problem/460/B 枚举s(X). #include<cstdio> #include<iostream&g ...
- ARTS Week 13
Jan 20, 2020 ~ Jan 26, 2020 Algorithm Problem 141 Linked List Cycle (环形链表) 题目链接 题目描述:给定一个链表,判断链表中是否存 ...
- 题解 SDOI2010 【栗栗的书架】
\[ Preface \] 看到这题洛谷标签有 主席树 ,还以为是什么二维主席树的玄学做法(雾 \[ Description \] 给出一个 \(R×C\) 的矩阵. 一共 \(m\) 次询问,每次询 ...
- 微信小程序中的图表构建
第一 html中的代码 <view class="container"> <canvas canvas-id="lineCanvas" bin ...