golang实现tcp编程
实现简单的tcp服务
package main import (
"fmt"
"net"
) func main() { fmt.Println("服务器开始监听..") // Listen创建网络监听
listen, err := net.Listen("tcp", "127.0.0.1:9999") defer listen.Close() if err != nil {
fmt.Println("listen err=,", err)
return
} for {
fmt.Println("等待客户端连接....") // Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept() if err != nil {
fmt.Println("accpet error: ", err)
} //conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println("accpet connect: ", conn.RemoteAddr().String())
}
}


是客户端连接服务端,实现以下功能
1. 编写一个客户端端程序,能链接到服务器端监听的端口
2. 客户端可以发送单行数据,然后退出
3. 能通过终端输入数据(输入一行发送一行),并发送给服务器端。
4.在终端输入exit,表示退出程序.
package main import (
"fmt"
"net"
) func procs(conn net.Conn) {
defer conn.Close() for {
byt := make([]byte, 512) fmt.Printf("wait %s send data\n", conn.RemoteAddr().String())
len, err := conn.Read(byt) //从conn中读取byte,会如果不发数据会阻塞 if err != nil {
fmt.Println("server err:", err)
return
} fmt.Println(string(byt[:len]))
}
} func main() { fmt.Println("服务器开始监听..") // Listen创建网络监听
listen, err := net.Listen("tcp", "127.0.0.1:9999") defer listen.Close() if err != nil {
fmt.Println("listen err=", err)
return
} for {
fmt.Println("等待客户端连接....") // Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept() if err != nil {
fmt.Println("accpet error: ", err)
} //conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println("accpet connect: ", conn.RemoteAddr().String()) go procs(conn)
}
}
package main import (
"bufio"
"fmt"
"net"
"os"
) func main() { // 连接服务端
conn, err := net.Dial("tcp", "127.0.0.1:9999") if err != nil {
fmt.Println("conn err: ", err)
}
fmt.Println("成功:", conn) //向服务器发送数据。 reader := bufio.NewReader(os.Stdin) // 返回第一次遇到\n的所有数据,byte
str, err := reader.ReadString('\n') if err != nil {
fmt.Println("reader fail: ", err)
} len, err := conn.Write([]byte(str)) if err != nil {
fmt.Println("send data fail: ", err)
}
fmt.Printf("客户端发送了%d自己后退出", len)
}

golang实现tcp编程的更多相关文章
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- Java TCP编程
Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...
- [C# 网络编程系列]专题五:TCP编程
转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...
- python中的TCP编程学习
今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- 【Socket编程】通过Socket实现TCP编程
通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...
- JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- 网络编程之TCP编程
网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...
- 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来
在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...
随机推荐
- BZOJ 1912 巡逻(算竞进阶习题)
树的直径 这题如果k=1很简单,就是在树的最长链上加个环,这样就最大化的减少重复的路程 但是k=2的时候需要考虑两个环的重叠部分,如果没有重叠部分,则和k=1的情况是一样的,但是假如有重叠部分,我们可 ...
- robotframework中RIDE的下载及安装
1.首先说一下我当前的环境配置 win10系统64位 python3.6.5,已配置环境变量 2.安装RIDE前需要安装的依赖包(使用pip就可以直接安装) 首先必须有robotframework这就 ...
- codevs 2606 约数和问题 (数学+分块)
题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...
- ecplise An incompatible version [1.2.14] of the APR based Apache Tomcat Native library is installed, while T
原文:https://www.cnblogs.com/levy-home/p/5676322.html 到http://archive.apache.org/dist/tomcat/tomcat-co ...
- Nginx+Keepalived部署
-----------ReProxy-------------------------Client-----------192.168.56.200 nginx+keepalived 192.168. ...
- luogu5020 [NOIp2018]货币系统 (完全背包)
我那个新的货币系统,就是把原来的货币系统中能被其他数表示的数删掉 那我就算有多少数能被别的数表示,那肯定是要被比它小的表示 于是排个序做完全背包就好了 但是我太zz不会完全背包,然后写了个bitset ...
- VSCode创建自定义代码段
上一篇:PyCharm创建自定义代码段(JetBrains系列通用) 设置方法 很简单,快速过一下,F1,然后输入snippets 然后选择对应语言 Python案例 内容和使用: { // pref ...
- Nginx简易编译安装
1.下载Nginx: http://nginx.org/download/nginx-1.6.3.tar.gz 2.安装Pcre.Zlib.Openssl等相关组件: [root@track ngin ...
- 模拟赛 yjqb
对于这种“不能交叉”的条件,不是很好处理.那么就考虑一下dp dp[i][j]表示,考虑A中用前i个,考虑连接B中用前j个,最大匹配.(类似LCS的DP) 转移:dp[i][j]=max(dp[i][ ...
- A1111. Online Map
Input our current position and a destination, an online map can recommend several paths. Now your jo ...