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套接字编程主要以下几个 ...
随机推荐
- AtCoder 瞎做
目录 ARC 058 E - 和風いろはちゃん / Iroha and Haiku 题意 题解 技巧 代码 ARC 059 F - バイナリハック / Unhappy Hacking 题意 题解 技巧 ...
- Hdoj 2050.折线分割平面 题解
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...
- 【转】分享两个基于MDK IDE的调试输出技巧
我们在STM32开发调试过程中,常常需要做些直观的输出,如果手头没有相关的设备或仪器,我们可以使用 IDE自带的工具.这里分享两个基于MDK IDE的调试输出技巧. 一.使用其自带的逻辑分析仪查看波 ...
- Codeforces Round #402 (Div. 2) D. String Game
D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- 「TJOI2015」概率论 解题报告
「TJOI2015」概率论 令\(f_i\)代表\(i\)个点树形态数量,\(g_i\)代表\(i\)个点叶子个数 然后列一个dp \[ f_i=\sum_{j=0}^{i-1} f_j f_{i-j ...
- BJWC2018上学路线
题目描述 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B 喜欢走最短的 ...
- CF1131F Asya And Kittens(Kruskal重构树,启发式合并)
这题难度1700,我感觉又小了…… 这题虽然没几个人是用kruskal重构树的思想做的,但是我是,所以我就放了个kruskal重构树的标签. 题目链接:CF原网 题目大意:有一个长为 $n$ 的排列, ...
- 利用ansible批量部署zabbix-agent
应用环境:Linux运维工作少不了一个好的监控,zabbix就是目前比较好的一款开源监控软件. 监控类型多种多样,如果不介意或者系统支持安装,那么agent方式是首选. 当主机数量较多时,可以利用相关 ...
- VMware配置centos虚拟机静态ip
1. 安装centos,这个自己安装就好了 2. 配置配置虚拟机静态ip桥接器 配置ip地址 2. 配置网络共享中心 这里面的默认网关填写之前我们配置的网络网关ip默认为192.168.6.2 3. ...
- CodeFroces-- Feel Good
题目大意:给出一段无序数组找出任意 一段区间和*这段区间的最小值 使这个值最大 栈的经典问题 用栈预处理出当前ai 为这块区间最小值的时候 的区间范围(L 和R) #include<bits/s ...